グラスホッパーを使っていると、線の交点を抽出したい場面があると思います。
そこで今回は、線の交点を抽出する方法を、3つ紹介します。
結論から言うと、「Curve | Curve」「Curve | Self」「Multiple Curves」を使うことで交点を抽出することができます。

それでは、1つずつ見ていきましょう。
Curve | Curve

使用コンポーネント:①Curve ②Curve | Curve
Curve | Curveを使うことで、2つの線の交点を抽出することができます。

まずは、交わっている2つの線を、それぞれCurveに格納します。
今回は、上の画像のような2つの線を用意しました。

その後Curveをそれぞれ、Curve | CurveのA端子とB端子につなげます。

すると、2つの線の交点が抽出されました。

使用コンポーネント:①Curve ②Curve | Curve ③Length ④Point
Curve | Curveから出力されるデータを見てみましょう。
P端子からは、交点の点データが抽出されます。
tAからは、1本目の線データのどの場所に交点があるかを教えてくれます。
Lengthを使うと、線の長さを調べることができるので、長さを見てみます。
すると、線の長さが約123だと分かりました。
tAを見てみると、約52です。
これは、交点が1つ目の123の長さの線の、約52の位置にあるということです。
一方でtBからは、2本目の線データのどの場所に交点があるかを教えてくれます。

Reparameterizeにすることで、交点の位置を0~1で分かるようにできます。
Curve | CurveのAかB端子を右クリックします。
その後、Reparameterizeを選択します。

これをAとB端子どちらでも行います。
すると、どちらもReparameterizeにすることができました。

今回は分かりやすくするため、交点を、1つの線の終点近くに移動させました。

するとtAとtBからは、0~1で表示されるようになりました。
0の場合は、交点が線の始点にあり、逆に1の場合は線の終点にあることを意味します。
先程、終点近くに1つの線を移動させたので、tBは約0.98と、1に非常に近い数値になりました。
Curve | Self

使用コンポーネント:①Curve ②Curve | Self
Curve | Selfを使うことで、1つの線の交点を抽出することができます。

上の画像のような、交わっている1本の線をCurveに格納します。
その後、CurveをCurve | SelfのC端子につなげます。

すると、このように1本の線の交点が抽出されました。

使用コンポーネント:①Curve ②Curve | Self ③Length ④Point
Curve | Selfから出力されるデータを見てみましょう。
P端子からは、交点の点データが出力されます。
t端子からは、線の始点からの、交点の位置を教えてくれます。
今回の場合、線の全長は約156です。
t端子を見ると、始点から交点の距離は約16です。
もう一つは、線の約127の位置に交点があります。
Multiple Curves

使用コンポーネント:①Curve ②Multiple Curves
Multiple Curvesを使うことで、複数の線の交点を抽出することができます。

今回は、上の画像のような、複数の線データをCurveに格納しました。

その後、CurveをMultiple CurvesのC端子につなげます。

すると、このように複数の線の交点が抽出されました。

使用コンポーネント:①Curve ②Multiple Curves ③Point ④List Item
Multiple Curvesから出力されるデータを見てみましょう。
P端子からは、交点の点データが出力されます。
iAとiBからは、それぞれの線の交点のIndex番号が出力されます。

List Itemを使い、最初はIndex番号0の点を見てみます。
1つ目の線のiAは、0と表示されています。

すると、1つの線の上にある、1つの交点が選択されます。
この交点のIndex番号が0です。

次は、iBを見てみます。
すると、1つ目の線のiBでは、1と表示されています。
点データのIndex番号1を見てみます。

すると、1つ目の線の、2つ目の点が選択されました。
このように、iAとiBからは、どの交点のデータなのかを、Index番号から判断できます。

tAとtBからは、それぞれの線のどの位置に交点があるかという、位置を知ることができます。
Index番号0が線の1本目、番号1が2本目、番号2が3本目のデータになります。
今回はReparameterizeにしているので、線の長さが0~1で表されています。
まとめ

今回は、線の交点を抽出することができる「Curve | Curve」「Curve | Self」「Multiple Curves」の3つのコンポーネントを紹介しました。
この3つのコンポーネントを活用して、交点を抽出してください。
今回は以上になります。
Comment