VectorUnitizeとVectorScaleでベクトルを単位化、長さ変更する方法|Grasshopper Python × RhinoScriptSyntax入門

RhinoScriptSyntax GHPython
VectorUnitize
VectorScale

VectorUnitizeと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

Translate »