在 python 中遍历该列表时将元素添加到索引之间的列表
adding elements to list in between indexes while iterating over that list in python
我正在尝试遍历 3D 点列表并在每组两个点之间创建一个新点,该点的距离大于一个常数值。
我试过使用缓冲区但没有成功,我的主要问题是每个新插入的点都需要遵守列表顺序并插入在几何上位于它之间的两点之间。
import math
#recieve v1 and maxDist from Blender
buffer = v1
offset = 0
for i in range(len(v1) - 1):
p1 = v1[i]
p2 = v1[i+1]
if (p1 - p2).length > maxDist :
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
offset = offset + 1 #
buffer.insert(i + offset, middleNode)
v2 = buffer
# send back v2 to Blender
我现在的输出与此相似,而预期会出现完美细分的圆圈
如果您使用一个列表而不是两个,您的解决方案会更简单。我的方法是:
i = 0
while i < len(v1) - 1:
p1 = v1[i]
p2 = v1[i + 1]
if (p1 - p2).length > maxDist:
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
# v1[:i] = v1[0..i] and v1[i:] = v1[i..]
v1 = v1[:i] + middleNode + v1[i:]
i += 2
else:
i += 1
或者如果列表理解不是一个选项:
i = 0
while i < len(v1) - 1:
p1 = v1[i]
p2 = v1[i]
if (p1 - p2).length > maxDist:
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
v1.insert(i + 1, middleNode)
i += 2
else:
i += 1
我正在尝试遍历 3D 点列表并在每组两个点之间创建一个新点,该点的距离大于一个常数值。
我试过使用缓冲区但没有成功,我的主要问题是每个新插入的点都需要遵守列表顺序并插入在几何上位于它之间的两点之间。
import math
#recieve v1 and maxDist from Blender
buffer = v1
offset = 0
for i in range(len(v1) - 1):
p1 = v1[i]
p2 = v1[i+1]
if (p1 - p2).length > maxDist :
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
offset = offset + 1 #
buffer.insert(i + offset, middleNode)
v2 = buffer
# send back v2 to Blender
我现在的输出与此相似,而预期会出现完美细分的圆圈
如果您使用一个列表而不是两个,您的解决方案会更简单。我的方法是:
i = 0
while i < len(v1) - 1:
p1 = v1[i]
p2 = v1[i + 1]
if (p1 - p2).length > maxDist:
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
# v1[:i] = v1[0..i] and v1[i:] = v1[i..]
v1 = v1[:i] + middleNode + v1[i:]
i += 2
else:
i += 1
或者如果列表理解不是一个选项:
i = 0
while i < len(v1) - 1:
p1 = v1[i]
p2 = v1[i]
if (p1 - p2).length > maxDist:
middleNode = ((p1.x+p2.x)/2,(p1.y+p2.y)/2,(p1.z+p2.z)/2)
v1.insert(i + 1, middleNode)
i += 2
else:
i += 1