ミニスクリプト集MENUへ戻る

名称 ・・・・・・・

2点から単位ベクトル計算

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

GetEVec

スクリプトNo ・・・・・・・ sub- 007
file名 ・・・・・・・ script007.vbs(右クリックのコンテクストメニューでダウンロードできます。(windowsのみ)
修正(2003/05/26)UTF-8からANSIに統一。
概略 ・・・・・・・

始点と終点の座標データから始点から終点方向への単位ベクトルを計算する

使用前提 ・・・・・・・

始点と終点の座標値を一次の配列で用意しておく
計算結果を受け取る一次の配列またはバリアント変数で用意しておく

依存関係 ・・・・・・・

特に無し

引数説明 ・・・・・・・

pos1:始点の座標データ配列 (pos1(0):x座標値、pos1(1):y座標値、pos(2):z座標値)
pos2:終点の座標データ配列 (pos1(0):x座標値、pos1(1):y座標値、pos(2):z座標値)
eVec:結果(単位ベクトルデータ)受け取り用配列またはバリアント変数
    eVec(0):x方向成分、eVec(1):y方向成分、eVec(2):z方向成分 を意味する。

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

true:成功  false:失敗

変数説明 ・・・・・・・

D:計算途中結果を一時保管する変数
Delta:方向別の始点と終点の差を保管する配列

注意点 ・・・・・・・

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 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
使用例
'座標データをmainルーチンで与えGetEVec関数で距離を求めるサンプル。
call main()

sub main()
  dim pt1(2),pt2(2),eV(2)
'座標データの設定
  pt1(0)=100
  pt1(1)=200
  pt1(2)=150
  pt2(0)=1200
  pt2(1)=1500
  pt2(2)=1300
'単位ベクトル計算ルーチンの呼び出し
  if not GetEVec(pt1,pt2,eV) then
    XShade.ShowMessageBox "始点と終点が同位置になっていないか確認してください",false
    Exit sub
  else
    for j=0 to 2
      eV(j)=Int(eV(j)*1000)/1000     '表示用に小数点以下3位でまるめる。
    next
  end if
  XShade.message("---始点から終点への単位ベクトル---")
  XShade.message("eVec["&eV(0)&","&eV(1)&","&eV(2)&"] です。")
end sub

ミニスクリプト集MENUへ戻る