0

複数のネストされたループを使用せずにこの問題を解決する方法はまだ見つかりません。問題は、Rhinoceros の幾何学的手法を使用して 2 つのリストを比較していることです。基本的には、行のリスト、開始点と終了点のセット (ネストされたリスト) があります。すべての始点と終点が線に接しています。スクリプトは、先頭に最も近い行のインデックスと末尾に最も近い行のインデックスを比較し、一致する場合は を返します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 の値を比較する前に一時的に保存する必要があるようで、行き詰まりました。おそらくメモリが過負荷になっていることはわかっています。これを行うためのより高速な方法があるはずですが、方法がわかりません。

注: rc.Geometry.Curve.ClosestPoint はTrue、線と点の間の距離が 0.0001 の許容値よりも小さい場合、つまり点が線上にある場合に戻ります。

4

1 に答える 1

0

このループは、データ セット内の他のものを参照していないようです。したがって、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

入力を右クリックすると、ツリー アクセスからアイテム アクセスに変更できます。

ただし、実際に解決しようとしている問題を述べていないため、これはすべて推測です。

問題を投稿すると、回答がより具体的になるように更新されます。

于 2016-07-18T20:09:44.210 に答える