我还找不到一种不使用多个嵌套循环的方法来解决这个问题。问题是我正在使用Rhinoceros的几何方法在两个列表之间进行比较。基本上有一列线,一组起始点和结束点(嵌套列表)。所有的起点和终点都与直线相接。该脚本将最接近开始的行的索引与最接近结束的行的索引进行比较,如果它们匹配,则返回True。
这是我当前的代码:
for i in range (10):
for j in range (100):
for k in range (3):
for l in range (len(linesList)):
pullSt = rc.Geometry.Curve.ClosestPoint(linesList[l], stPoint[i][j][k], 0.0001)[0]
pullEnd = rc.Geometry.Curve.ClosestPoint(linesList[l], endPoint[i][j][k], 0.0001)[0]
if pullSt == True and pullEnd == True:
match[i][j][k] = True我以为它可以使用生成器表达式,但我遇到了困难,因为在进行比较之前,我似乎实际上必须临时存储pullSt和pullEnd的值。我知道我的内存可能超载了,肯定有更快的方法来做到这一点,但我只是不确定该怎么做。
注意:如果直线与点之间的距离小于公差0.0001,则rc.Geometry.Curve.ClosestPoint返回True,这意味着该点在直线上。
发布于 2016-07-19 04:09:44
这个循环似乎并没有引用您的数据集中的任何其他内容,因此,通过使用grasshopper自己的内置工具,在每个对象上运行一小段代码可能是可以的。
pullSt = rc.Geometry.Curve.ClosestPoint(linesList[l], stPoint, 0.0001)[0]
pullEnd = rc.Geometry.Curve.ClosestPoint(linesList[l], endPoint, 0.0001)[0]
if pullSt == True and pullEnd == True:
match = True如果您右键单击输入,则可以将它们从树访问更改为项访问。
这只是一种猜测,因为你还没有说出你真正想要解决的问题。
如果你发了这个问题,我会更新更详细的答案。
https://stackoverflow.com/questions/36961160
复制相似问题