名称 | ・・・・・・・ |
二直線の交点 |
|||
ルーチン名 | ・・・・・・・ |
LinesPtCross |
|||
スクリプトNo | ・・・・・・・ | sub_set03- 010 | |||
file名 | ・・・・・・・ | ScriptSet03.lzh sub_set03のページからセットごとダウンロードしてください。 |
|||
概略 | ・・・・・・・ |
2つの直線からその交点を求めます。 |
|||
|
|||||
使用前提 | ・・・・・・・ |
戻り値を受け取る通常のバリアント変数(配列では無く)を宣言して用意しておく。 |
|||
依存関係 | ・・・・・・・ |
judgeLinesCross |
:直線の交差判定をします。(sub_set03-011) |
||
引数説明 | ・・・・・・・ |
eVec1 |
:直線1の方向余弦 [vec(2)形式] |
||
戻り値説明 | ・・・・・・・ |
交点の位置ベクトルが戻ります。 通常のバリアント変数で受けてください。 [vec(2)形式] |
|||
変数説明 | ・・・・・・・ |
S1,S2,Q,dif,t |
いずれも計算用の一時変数です。 |
||
注意点 | ・・・・・・・ |
空間内で直線が交差する確立は非常に低く、コンピューターで計算する際には誤差を見越す必要があります。 |
|||
スクリプト | |||||
'---2直線の交差点(2点が交差するときのみ存在)----------- Function LinesPtCross(eVec1,eVec2,Pos1,Pos2) dim S1,S2,Q,dif,t if Not JudgeLinesCross(eVec1,eVec2,Pos1,Pos2) then LinesPtCross=false exit function end if dif=subVec3(Pos2,Pos1) Q=innerProduct3(eVec1,eVec2) S1=innerProduct3(eVec1,dif) S2=-(innerProduct3(eVec2,Dif)) t=(S2*Q+S1)/(1-Q^2) LinesPtCross=addVec3(Pos1,realVec3(t,eVec1)) End Function |
|||||
使用例 | |||||
'2直線の交差点のテスト '(注)交差するのは特別な場合なので与えるデータを変更する時は注意が必要 '変数はスクリプトのtest()を参照 dim vecResult,eVec1,eVec3 eVec1=normVec3(vec1) eVec3=normVec3(vec3) vecResult=LinesPtCross(eVec1,eVec3,pos1,pos3) if IsArray(vecResult) then for j=0 to 2 XShade.Message"j="&j&" ans="&vecResult(j) next drawVec pos1,vec1 drawVec pos3,vec3 drawPos vecResult ColorSet Red XShade.ObjectName="交差点の位置ベクトル" else XShade.Message"交差しません" end if XShade.SelectParent 1 |