0

如果不使用多个嵌套循环,我还找不到解决此问题的方法。问题是我正在使用 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 值。我知道我可能会超载我的记忆,必须有更快的方法来做到这一点,但我只是不确定如何。

True注意:如果直线和点之间的距离小于 0.0001 的容差,则返回 rc.Geometry.Curve.ClosestPoint ,这意味着该点在线上。

4

1 回答 1

0

这种循环似乎没有引用您数据集中的任何其他内容,因此使用蚱蜢自己的内置工具在每个对象上工作的代码要短得多。

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

如果您右键单击输入,您可以将它们从树访问更改为项目访问。

不过,这都是猜测,因为您还没有说出您实际上要解决的问题。

如果您发布问题,我将更新答案以更具体。

于 2016-07-18T20:09:44.210 回答