我知道这听起来很琐碎,但我的大脑拒绝给出一个算法。你知道吗
我有一堆分散在二维平面上的点,想把它们存储在一个列表中,这样它们就可以创建一个环。这些点不属于循环。你知道吗
从列表中的第一个点开始(图中为红色),然后根据它们的距离依次添加其余的点。你知道吗
由于我不能回答我的问题,我将在这里张贴一个可能的答案。你知道吗
这是一种似乎能起作用的方法。 V.pos保存节点的位置,distance()只是一个返回两点之间欧氏距离的函数。一种更快的方法是在将下一个节点附加到环之后删除它,这样就不必经过已经连接的点
ring = [nodes[0]]
while len(ring) < len(nodes):
minl=99999
for i in range(len(nodes)):
dist = distance(V.pos[ring[-1]],V.pos[nodes[i]])
if dist<minl and nodes[i] not in ring:
minl = dist
next_node = nodes[i]
ring.append(next_node)
如果您的点云已经像您的示例一样呈环形,那么这里有一个想法可以给出令人满意的结果:
当然,这会产生随机云的锯齿状恒星,但不清楚“环”到底是什么。您可以将其用作初稿,并开始交换节点,如果这样可以缩短总距离的话。也许除了实现图中所有节点的最小距离之外,您只需要这个简单的代码。你知道吗
Anayway,这里是:
相关问题 更多 >
编程相关推荐