ポリゴンの平面化 #2

前回は軸に向かって特定の平面へ座標を移動させる計算を書きましたが、今回は特定のベクトルで平面にそろえる方法です。

plane_equation_intersection

ここでは直線の式を使います。

通過点(x1, y1, z1)を通り、ベクトルが<<a1, b1, c1>>の直線の式は

x = x1 + a1 *t
y = y1 + b1 *t
z = z1 + c1 *t

となります。(t は任意の実数)

平面を定義した上で、平面の式に直線の式を代入してtを求めます。

a*x + b*y + c*z + d = 0

x, y, zに直線式を代入する

a*(x1 + a1*t) + b*(y1 + b1*t) + c*(z1 + c1*t) + d = 0

これを展開していきます

a*x1 + a*a1*t + b*y1 + b*b1*t + c*z1 + c*c1*t + d = 0

t以外を右辺に移動させていきます

t*(a*a1 + b*b1 + c*c1) + a*x1 + b*y1 + c*z1 + d = 0

t = -(a*x1 + b*y1 + c*z1 + d)/(a*a1 + b*b1 + c*c1)

式は複雑になりましたが、右辺の変数に値を代入して係数tを求めます。

整理すると

a, b, c :平面のベクトル
d :平面式の係数
a1, b1, c1 :直線のベクトル
x1, y1, z1 :移動させたい頂点の座標

そして初めの直線式にtの値を代入すれば、平面と交差する座標を求めることができます。

 

flatten_face_ui_02

参考にMAYAで作成したインターフェイスです。

応用例ですが、平面式と直線式を上手く使えば空間上で線形の計算することができるようになります(各座標が平面に対してどれだけ離れているかを比較する要領で)。

 

plane_equation_gradient

たとえば2つの座標間で頂点カラーのグラデーションをかける、なんてこともできるようになります(手作業では大変ですよね?)。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中