名称 | ・・・・・・・ |
平面と直線の交点 |
|||
ルーチン名 | ・・・・・・・ |
LinePlanePtCross |
|||
スクリプトNo | ・・・・・・・ | sub_set03- 012 | |||
file名 | ・・・・・・・ | ScriptSet03.lzh sub_set03のページからセットごとダウンロードしてください。 |
|||
概略 | ・・・・・・・ |
3点で指定した平面と、直線上の点(位置ベクトル)と方向余弦とで指定した直線の交点を求めます。 |
|||
|
|||||
使用前提 | ・・・・・・・ |
戻り値を受け取る通常のバリアント変数(配列では無く)を宣言して用意しておく。 |
|||
依存関係 | ・・・・・・・ |
addVec3 |
ベクトルの加法(sub_set03-001) |
||
引数説明 | ・・・・・・・ |
Lpos |
:直線上の座標値(位置ベクトル) [vec(2)形式] |
||
戻り値説明 | ・・・・・・・ |
交点の座標(位置ベクトル)が戻ります。 [vec(2)形式] |
|||
変数説明 | ・・・・・・・ |
変数説明の記述 |
記述 |
||
注意点 | ・・・・・・・ |
本来、平行でfalseを返すべき時に誤差によりfalseを返さないことがありえます。そのためにclearanceを設定するようになっていますので,使用状況に合わせて最適化してください。 |
|||
スクリプト | |||||
'---平面と直線の交点(面と線が交差する時のみ存在)------- '(注)変換の繰り返しなどで元データの誤差が大いと判定漏れの可能性あり ' 有効桁数と相談してclearanceを決めてください。 Function LinePlanePtCross(Lpos,LeVec,Ppos1,Ppos2,Ppos3) dim Nvec,t,clearance clearance=0.00001 Nvec=normVec3(CrossProduct3(subVec3(Ppos2,Ppos1),subVec3(Ppos3,Ppos1))) if Not IsArray(Nvec) then LinePlanePtCross=false exit function end if if abs(innerProduct3(NVec,LeVec)) < clearance then LinePlanePtCross=false exit function end if t=-innerProduct3(Nvec,subVec3(Lpos,Ppos1))/innerProduct3(NVec,LeVec) LinePlanePtCross=addVec3(Lpos,realVec3(t,LeVec)) end function |
|||||
使用例 | |||||
call mainSub() sub mainSub() if StartMsg() then ExitSub XShade.message("OKが押されました。") end sub |