日々適当

hibitekitou

まーべらすでざいなー

mac |2012-05-07
Windows版しかないじゃん、ってことでスルーしていたツール。Marvelous Designer。衣装を作るツールでございます。

Marvelous Designer - Modeling 3D Cloth Within [Vimeo]

従来Windows版しか無かったものが、Mac版とLinux版の開発が発表され、Mac版がリリースされるに至ったそうです。
ってことで、興味を持ったりしたもののの、オレ、服の構造とかファッションとかさっぱり分からなかったわ(^^;
コメント ( 0 )|Trackback ( )

多角形の面積

sansu |2012-05-07
ポリゴンの面積を求めてみようと思います。
周知の通り、Softimageで通常扱うポリゴンは3点以上の頂点からなっています。つまり、三角形の集まりと考えることが出来るわけです。そこで、三角形の分割して、その和を求めてやればよい、という簡単な話になります。

ただし、三角形に分割してというお話はあまり簡単ではなさそうです。



例えば、こんなふうに三角形に分割できればいいんですけど、それを実装するのはちょっと面倒そうなんですよね。この三角形を構成する頂点はどれだろうというのを見つけだすのが大変そうなのですよ。
そこで、任意の一点と多角形の各頂点を結ぶ三角形を考えます。



こうすると、ポリゴンを構成する頂点を順番にたどっていけば良いことになり、先の考え方よりずいぶんと簡単そうです。上図のように、任意の一点が多角形の内側にあれば分かりやすいのですけど、その一点が外側にあってもこの考え方は成立するようです。

要するに、下図の水色の面積を求めるには、緑色の部分から黄色の部分を引けばいいわけなのですよ。





以下、非常にゆるーい書き方になります。なんとなく。

外積です。
2つのベクトルの外積で得られるベクトルの長さは、そのベクトルで作られた平行四辺形の面積に相当する、というのがあります。



上図の赤く塗りつぶされた部分が、ベクトルAとベクトルBの外積(ベクトルC)の長さに相当する部分ってことっすね。
んで、Cの向きはA x Bの時とB x Aの時では逆になります。

下図の多角形abcdefにおいて、任意の一点をpに決めた時、青い三角形cdpと赤い三角形fapについて考えてみます。



頂点の並び順通りにベクトルの向きを考慮していくと、青い三角形はベクトルcdとベクトルcpの外積の長さの半分の値が面積に、赤い三角形はベクトルfaとベクトルfpの外積の長さの半分の値が面積になります。例えば右手の親指をcdに合わせて、ひとさし指をcpに合わせると、中指は画面手前側に曲げられると思います。親指をfaにひとさし指をfpに合わせると中指は画面奥に曲げることが出来ます。
雰囲気として、外積で得られるベクトルの向きが逆になっていることが分かるんじゃないでしょうか(^^)

というわけで、青い三角形連中で形作られるのが前述した「緑色の部分から黄色の部分を引けばいい」の緑色にあたり、赤い三角形連中で形作られるのが黄色にあたるんで、多角形の面積は、多角形の各辺に相当するベクトルと、頂点から多角形と同一平面上の一点へのベクトルとの外積の長さの和の半分の値になると言えるんじゃないか、となります。ただし、外積で得られるベクトルの向きが逆なら、長さをマイナス値にしてやります。

上図の場合、頂点aとbを結ぶベクトルを (ab) のように表し、ベクトルVの長さを length (V) とか書いてやるとするなら
( length((ab)x(ap)) + length((bc)x(bp)) + length((cd)x(cp)) + length((de)x(dp)) + length((ef)x(ep)) + length((fa)x(fp)) )/2
ということっすね。efとfaの部分はベクトルが逆だからlengthで出てくる値もマイナスってことで一つお願いします。

これをICEで実装してみました。なお、任意の一点はポリゴンがゆがんでいることを考慮せずに、ポリゴンを構成する頂点位置の平均の位置に設定しています。



コンパウンドの中身は以下の通り。符号の向きはポリゴンの法線と外積の向きが同じか否かで判断します。



ポリゴンがゆがんでいると(すべての頂点が同一辺面上に無いと)、値が狂ってきますけど、まぁ、きっちりとした値を出す必要が無く、モデルもそんなにゆがんでいないトポロジーなものなら、何とかつかえるんじゃないかなー。
あ、いくつかある Select in Arrayノードのうち、一番左下のヤツいらないじゃんw
コメント ( 0 )|Trackback ( )
  ・