gpt4 book ai didi

python - 矢量化行进立方体(正方形) - 将直线连接成曲线

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:49:27 29 4
gpt4 key购买 nike

我正在绘制一个带有移动立方体(正方形,因为它是 2d)算法的元球。一切都很好,但我想将其作为矢量对象获取。

到目前为止,我已经从每个事件方 block 中得到一两条矢量线,将它们保存在列表线中。换句话说,我有一组小矢量线,在空间上显示几条等值线(曲线)——我的目标是从线重建这些曲线。

现在我坚持快速将它们连接在一起:基本上我需要将所有线一条一条地连接在一起形成几个序列(曲线)。我不知道那里会有多少条曲线(​​序列),线可能在不同的方向,我需要将线处理成独特点的序列。

到目前为止,我写了一些明显丑陋和半工作的东西(这里line是一个类,以点列表作为属性points,和chP 是一个检查点是否足够接近的函数,t 定义了这个“足够”):

def countur2(lines):

'''transform random list of lines into
list of grouped sequences'''
t = 2 # tolerance

sqnss = [[lines[0]]] # sequences
kucha = [lines[0]] #list of already used lines

for l in lines:
for i,el in enumerate(lines):
print 'working on el', i
ss = sqnss[-1][0]
ee = sqnss[-1][-1]
if el not in kucha:
if chP(el.points[0],ee.points[1],t):
sqnss[-1].append(el)
kucha.append(el)
break
elif chP(el.points[1],ee.points[1],t):
sqnss[-1].append(el.rvrse())
kucha.append(el)
break

elif chP(el.points[1],ss.points[0],t):
sqnss[-1] = [el] + sqnss[-1]
kucha.append(el)
break

elif chP(el.points[0],ss.points[0],t):
sqnss[-1] = [el.rvrse()] + sqnss[-1]
kucha.append(el)
break



print 'new shape added, with el as start'
sqnss.append([el])
kucha.append(el)


#return sqnse of points
ps = []
for x in sqnss: ps.append([el.points[0] for el in x])

return ps

我知道这是一个很大的问题,但是请给我任何关于处理这个任务的正确方向的线索

最佳答案

第一个选项是对所有单元边进行唯一编号,并将每个向量与其连接的边对相关联。

在字典中输入所有对,两种方式:(a,b)(b,a)。然后,从任意对开始,比如 (a,b),你会通过 b 找到下一对,比如 (b,c)。您将从字典中删除 (b,c)(c,b),然后从 c 继续,直到链断裂域的一侧,或循环。

第二个选项是扫描整个域,当您找到与等值线交叉的单元格时,计算向量,然后移动到共享与等值线交叉的边的相邻单元格,依此类推。为避免无限扫描,您会将单元格标记为已访问过。

与第一种方法相比,不需要字典,因为链的跟随完全基于局部几何。

注意有两个陷阱:

  • 具有一个或多个角值等于 is-level 的单元格正在制造麻烦。一种可能的解决方法是稍微修改值角;这将创建一些微小的向量。

  • 单元格可以被两个向量而不是一个向量交叉,并且需要访问两次。

关于python - 矢量化行进立方体(正方形) - 将直线连接成曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357771/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com