CurveTangentCurveTangent関数で、線の接線ベクトルを取得することができます。
本記事のGrasshopperファイルのダウンロードはこちら

今回は、上の画像のように、曲線の接線ベクトルを取得してみます。

使用コンポーネント 1: Python 3 Script 2: Curve 3: Point 4: Vector 5: Vector Display
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
pts = [(0,0,0),(10,10,0),(20,0,10),(30,10,10),(40,0,20)]
# 曲線を通過させる複数の点座標を定義
curve = rs.AddInterpCurve(pts)
# 指定した点を通る補間曲線を作成する
domain = rs.CurveDomain(curve)
# 曲線のパラメータ範囲(ドメイン)を取得する
norm = 0.5
# 曲線上の位置を、0〜1の範囲で定義
# 0.5 は曲線全体の50%位置を表す
t = domain[0] + norm * (domain[1] - domain[0])
# 正規化した値を、実際の曲線パラメータ範囲へ変換する
tangent_vec = rs.CurveTangent(curve, t)
# 指定した位置の接線ベクトルを取得する
# 接線ベクトルは、曲線が進む方向を表している
unit_vec = rs.VectorUnitize(tangent_vec)
# 接線ベクトルを単位化(長さ1にする)
vector = rs.VectorScale(unit_vec, 10)
# 単位ベクトルを長さ10へ拡大する
point = rs.EvaluateCurve(curve, t)
# 指定したパラメータ位置の点を取得する「Python 3 Script」には、上記のコードが記載されています。
import rhinoscriptsyntax as rs から t = domain[0] + norm * (domain[1] - domain[0]) までは、前回記事と同じ内容です。
そのため、該当箇所は、前回記事の参照をお願いします。
順番に、残りのコードの解説をしていきます。
tangent_vec = rs.CurveTangent(curve, t)CurveTangent 関数で、指定した位置の接線ベクトルを取得しています。
第1引数では、線データを指定します。
第2引数では、線のパラメータ値を指定します。
これにより、線の接線ベクトルを取得できました。
unit_vec = rs.VectorUnitize(tangent_vec)VectorUnitize 関数で、取得したベクトルを単位化(長さ1にする)にしています。
単位ベクトルにすることで、後から自由に長さを調整しやすくなります。
vector = rs.VectorScale(unit_vec, 10)VectorScale 関数で、単位ベクトルを10倍し、長さ10のベクトルへ変更しています。
これにより、方向を維持したままベクトルの長さだけを変更することができます。
第1引数ではベクトルデータ、第2引数では倍率の数値を指定します。
これは、後程Rhino上で見やすくするために、ベクトルの長さを変えています。
point = rs.EvaluateCurve(curve, t)EvaluateCurve 関数で、線上の指定した位置の点座標を取得しています。
第1引数では線データ、第2引数では線のパラメータ値を指定します。
この点は、後程ベクトルを表示するための基点として取得しています。
「Python 3 Script」の右側の端子名を「curve」に設定すると線データ、「point」に設定すると点データ、「vector」に設定するとベクトルデータがGH上に出力されます。
Vector Displayコンポーネントを使うことで、ベクトルを可視化できます。




Comment