[概論] 外積:maxscript 概論と書式


外積:
○ 2Dの外積は左右のチェックに使う
2Dの外積の結果出てくる値はsin(θ)です。結果の符合を見れば、「×」の左側のベクトルに対して右側のベクトルが左にあるか右にあるかを判定するのに使えます。
また、結果が0ならば2つのベクトルは平行であることもわかります。

○ 3Dの外積は三角ポリゴンの向きを計算する
外積は三角ポリゴンの向きを調べることが出来ます。三角ポリゴンは3つの頂点を持つ平面です。
頂点の1つを原点(始点)と考えると、他の2つの頂点までの軌跡はベクトルになります。
しかも、その2つの軌跡はポリゴンにぺったりとくっついています。いわゆる「平面上の線」です。
ということは、その外積を計算すると、ポリゴンに直行する法線を得ることができます。
演算順によって符号は変ってしまいますが、きちっとルールを設ければ、ポリゴンが3D空間でどの方向を向いているかを一意に定めることが出来ます。
3Dの外積で最も多用される利用法の1つです。

(参考サイト:http://marupeke296.com/COL_Basic_No1_InnerAndOuterProduct.html)

○数学、外積の基礎
http://manavee.com/classroom?video_id=2000040



外積参考1:https://sites.google.com/site/m3dgptpprojects/home/tp4-projects/tp-scriptoperators/m3d-tp4-scriptoperators

"m3d_TP-AlignmentVecCross.zip"

upVecter = [0,0,1]
x1 = normalize (cross upVecter inputVecter) -- this represents the X-axis of the inputVecter
x2 = normalize (cross inputVecter x1) -- this is the new Z-axis

outAlign = matrix3 x1 inVecter x2 [0,0,0]

外積参考2:http://docs.autodesk.com/3DSMAX/14/JPN/Rampage%20MAXScript%20Guide/index.html?url=files/GUID-83E779EA-03B6-4785-B610-9A6EE574E10-273.htm,topicNumber=d28e92328
平面の位置を 3 ポイント ヘルパーに合わせておく方法

thePlane = Plane()                                                     -- 平面と 3 ポイント ヘルパーを作成。
p1 = point pos:[40,-10,30]
p2 = point pos:[20,30,40]
p3 = point pos:[-10,-20,30]

ctrl = transform_script()                                           -- 変換スクリプトを作成し、平面に割り当てます。
thePlane.transform.controller = ctrl

ctrl.addNode"p1" p1                                                 -- 3 つのノード変数を作成し、これらにヘルパーを割り当てます。
ctrl.addNode"p2" p2
ctrl.addNode"p3" p3

-- 式を格納するための変数を作成します。

txt ="v1 = normalize (p2.pos-p1.pos)\n"                 -- Point01 から Point02 へのベクトルを計算します。
txt +="v2 = normalize (p3.pos-p1.pos)\n"               -- Point01 から Point03 へのベクトルを計算します。

txt +="nv1 = normalize (cross v1 v2)\n"                 -- 2 つのベクトルの乗積は、平面に対する法線です。
txt +="nv2=normalize(cross nv1 v1)\n"                   -- 法線とベクトル 1 の乗積から 3 番目の軸が求められます。

-- 1 つ目のベクトルと、すべて互いに直交する2 つの乗積を使用して matrix3 値を作成します。
-- 変換部分 (.row4) は、次の 3 ポイントの位置の中央のポイントになります。

txt +="matrix3 v1 nv2 nv1 ((p1.pos+p2.pos+p3.pos)/3)"
ctrl.setExpression txt                                                 -- 式をスクリプト コントローラに割り当てます。

0 コメント:

コメントを投稿