sub_set03へ戻る

名称 ・・・・・・・

2点から方向余弦(単位ベクトル)を計算

ルーチン名 ・・・・・・・

GetEVec

スクリプトNo ・・・・・・・ sub_set03- 007
file名 ・・・・・・・ ScriptSet03.lzh
sub_set03のページからセットごとダウンロードしてください。
概略 ・・・・・・・

2つの位置ベクトルの示す点を結ぶベクトルの方向余弦を計算する。

使用例実行結果
これはスクリプトのtest()にある機能確認スクリプトを実行して「GetEVec」ルーチンの結果を描画させたものです。
紫の矢印はベクトルの向きを示しています。

左図の緑色が位置ベクトルpos1,pos2でこの2つのポイントを結ぶ黄色いベクトルの単位ベクトルを求めます。
単位ベクトルは大きさ1なので左の図では確認できません。下図は原点付近を拡大したものです。

使用前提 ・・・・・・・

引数を通して計算結果が返るのでeVecは配列で宣言して用意しておく。[vec(2)形式]
pos1とpos2が別のものであること。

依存関係 ・・・・・・・

特になし

引数説明 ・・・・・・・

pos1
pos2
eVec

:最初の座標の位置ベクトル[vec(2)形式]
:もう一つの座標の位置ベクトル[vec(2)形式]
:計算された単位ベクトルが返ってくる。[vec(2)形式]

戻り値説明 ・・・・・・・

計算が成功(true)したか失敗(false)したかが返される。pos1,pos2が同じ時失敗する。

変数説明 ・・・・・・・

D
delta
j

:計算用一時記憶変数
:計算用一時記憶配列 [vec(2)形式]
:カウンタ用

注意点 ・・・・・・・

計算結果は引数を介して返るので間違わないで下さい。
戻り値は処理が正常に行われたかどうかだけが戻されます。
pos1,pos2が同じである場合にはfalseが返りますので、このような可能性があるときは戻り値を判定して処理を切り分けてください。それ以外のときは無視してください。

 
スクリプト
'---与えられた2点の座標データから単位ベクトルを計算する
function GetEVec(pos1,pos2,eVec)
  dim D,delta(2),j
  D=0
  for j=0 to 2
    delta(j)=pos2(j)-pos1(j)
    D=D+delta(j)^2
  next
  if D=0.0 then 
    GetEVec=false
    Exit Function
  end if
  D=D^(1/2)
  for j=0 to 2
    eVec(j)=delta(j)/D
  next
  GetEVec=true
end function
使用例
'2点の単位ベクトルのテスト
'(注)単位ベクトルは非常に小さいので拡大してみてください。
'変数はスクリプトのtest()を参照
  dim VecResult(2)
  if GetEVec(pos1,pos2,vecResult) then
    for j=0 to 2
      XShade.Message"j="&j&"  ans="&vecResult(j)
    next
    drawPos pos1
    drawPos pos2
    drawVec pos1,subVec3(pos2,pos1)
    XShade.ObjectName="2点指定ベクトル"
    drawVec pos0,vecResult
    ColorSet Red
    XShade.ObjectName="単位ベクトル"
  else
    XShade.Message"pos1とpos2は同位置です。"
  end if
  XShade.SelectParent 1

sub_set03へ戻る