VectorUnitizeVectorScaleVectorUnitizeとVectorScaleで、ベクトルを単位ベクトル化(長さが1のベクトル)、ベクトルの長さを変更することができます。
本記事のGrasshopperファイルのダウンロードはこちら

今回は、上の画像のように、元々のベクトルから単位ベクトル化、長さ変更をします。

使用コンポーネント 1: Python 3 Script 2: Vector 3: Point 4: Vector Display 5: Vector Length
import rhinoscriptsyntax as rs
# RhinoをPythonから操作するためのライブラリを読み込む
start_pt = (0, 0, 0)
# 元となるベクトルの始点の座標を作成
end_pt = (3, 4, 0)
# 元となるベクトルの終点の座標を作成
vector = rs.VectorCreate(end_pt, start_pt)
# 元となるベクトルを作成
unit_vec = rs.VectorUnitize(vector)
# ベクトルを単位化(長さ1にする)
scaled_vec = rs.VectorScale(unit_vec, 10)
# 単位ベクトルを長さ10に変更
point = rs.AddPoint(start_pt)
# 始点の座標から点を作成「Python 3 Script」には、上記のコードが記載されています。
順番に、コードの解説をしていきます。
start_pt = (0, 0, 0)
end_pt = (3, 4, 0)start_pt = (0, 0, 0) では、ベクトルの始点となる座標を定義しています。
end_pt = (3, 4, 0) では、ベクトルの終点となる座標を定義しています。
vector = rs.VectorCreate(end_pt, start_pt)VectorCreate 関数で、2つの座標からベクトルを作成しています。
第1引数には終点の座標、第2引数には始点の座標を指定します。
今回は、(3, 4, 0) 方向のベクトルが作成されます。
ここで作成されたベクトルを基に、単位ベクトル化や長さ変更を行います。
unit_vec = rs.VectorUnitize(vector)VectorUnitize 関数で、ベクトルを単位化しています。
単位化とは、「方向をそのまま維持しながら、長さだけを1にする処理」です。
scaled_vec = rs.VectorScale(unit_vec, 10)VectorScale 関数で、先程作成した単位ベクトルの長さを変えています。
第1引数ではベクトルデータ、第2引数では倍率の数値を指定します。
今回は、単位ベクトルを指定しているため、1 × 10 = 10 の長さのベクトルが作成されます。
point = rs.AddPoint(start_pt)AddPoint 関数では、始点の座標に点を作成しています。
この点は、後程GH上でベクトルを確認するために作成しています。
「Python 3 Script」の右側の端子名を「vector」に設定すると元々のベクトルデータ、「unit_vec」に設定すると単位化されたベクトルデータ、「scaled_vec」に設定すると長さ変更されたベクトルデータ、「point」に設定すると点データがGH上に出力されます。
Vector Displayコンポーネントを使うことで、ベクトルを可視化することができます。
Vector Lengthコンポーネントで、作成されたベクトルの長さを見てみると、元々のベクトルは5、単位ベクトルは1、長さ変更後のベクトルは10になっています。




Comment