マリオネット・スクリプト解説講座

新着記事第60回「多角形の頂点の角度を求める」

ArchitectLandmarkSpotlightDesigner

今回はマリオネットを使用して、多角形の各頂点の角度をまとめて可視化するプログラムを作ります。

Vectorworksで頂点の角度を調べる方法はい様々ですが、ここでは多角形の各頂点の座標を元に角度を求めていきます。角度を知りたい頂点からその前の頂点にのばすAベクトルと、その次の頂点にのばすBベクトルの2つのベクトルのなす角を計算します。

60-1. 頂点の座標

まずは頂点の座標を求めるところから始めます。Get Vertexノードは指定した番号の頂点の座標を取得します。番号は0番から始まります。

ここではあらかじめ名前をつけた多角形をNameノードで取得して使用します。

一つ目(0番目)の頂点を取得する場合はiVertポートに0を入力します。

頂点の位置に基準点と座標値をプロットして可視化します。

番号を変更することで任意の頂点の座標を取得することができます。

60-2. 前後の頂点の座標

今回は角度を知りたい頂点と、その前後の頂点の座標から角度を計算します。前後の頂点の番号は、単純に知りたい頂点の番号から-1または+1すれば求められますが、例外があります。

最初の頂点では頂点番号から-1すると、前の頂点の番号が-1番目となりGet Vertexノードで頂点を参照できません。

同様に最後の頂点では、+1すると次の頂点番号が最大数を超えてしまい参照できません。

場合分けをして対応する方法もありますが、ここでは場合分けを使用せずに計算で頂点番号を求めます。

最初と最後の頂点を考慮する場合、前後の頂点の番号は次の計算で求められます。modは割り算のあまりの数を求める演算子です。

前の頂点番号 = (頂点番号-1+頂点総数) mod 総頂点数
次の頂点番号 = (頂点番号+1) mod 総頂点数

この計算をマリオネットで再現すると次のようになります。

前の頂点番号:

次の頂点番号:

このプログラムを使用すれば最初と最後を含め、どの位置の頂点を指定しても前後の頂点の番号を取得することができます。

知りたい頂点とその前後の頂点の座標をまとめて取得するように、これまでのプログラムをまとめます。

このプログラムを使いまわせるようにラッパーノードに変換します。変換の前に入力と出力の部分をpassノードに置き換えて外出ししておきます。

ラッパーノードでも同様に図形の名前と頂点番号を指定して、前後の頂点の座標をプロットします。

60-3. 角度を求める

ここまで3点の頂点を取得することができたので、いよいよ角度の計算です。前後の頂点を使って2つのベクトルを作成します。

2つのベクトルの間のなす角は次の式で求めることができます。

なす角 = arccos( AベクトルとBベクトルの内積 / (Aベクトルの大きさ*Bベクトルの大きさ) )

2つベクトルの内積を求めます。

ベクトルの大きさを求めます。

式にあてはめながら逆余弦(arccos)を計算して角度を算出します。

指定した頂点の位置に角度をプロットします。

値を丸めて表示を調節します。

最後に全ての頂点の角度をまとめて計算します。Get Vertex Countノードで求めた総頂点数から頂点の数の連番の数列を作成してプログラムに流し込みます。

頂点の数が変わっても、全ての頂点の角度をまとめて求めることができます。

この機能を利用できる製品

Architect

Vectorworks Architect

建築設計や内装、ディスプレイデザインに対応した先進的なBIM・インテリア設計支援機能、拡張機能、さらには豊富な建築向けのデータライブラリを搭載した建築/内装業界向け製品
詳細情報 購入ページ

Landmark

Vectorworks Landmark

地形モデルや多彩な植栽、灌水設備計画等に対応するランドスケープデザイン機能、さらには豊富な造園向けのデータライブラリを搭載した都市計画/造園業界向け製品
詳細情報 購入ページ

Spotlight

Vectorworks Spotlight

ステージプランニングやライティング計画に対応した先進的な舞台照明計画支援機能、さらには各種メーカー製のトラスや照明機材、音響機器等の豊富なデータライブラリを搭載したエンタテインメント業界向け製品
詳細情報 購入ページ

Designer

Vectorworks Design Suite

専門分野別(建築設計/ディスプレイデザイン、ランドスケープデザイン、ステージデザイン&スポットライトプランニング)の設計支援機能、拡張機能、さらには豊富なデータライブラリを搭載した最上位の製品
詳細情報 購入ページ