sub_set03へ戻る

名称 ・・・・・・・

2直線のなす角

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

LinesAlph

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

2つのベクトルの方向余弦(単位ベクトル)からそのベクトルのなす角を計算します。

使用例実行結果

これはスクリプトのtest()にある機能確認スクリプトを実行して「LinesAlph」ルーチンの結果を描画させたものです。

左図の黄色がvec1,vec2でこの2つのベクトルがなす角度(オレンジの部分)を計算します。

紫の矢印はベクトルの向きを示しています。

戻り値は角度なので描画されません。メッセージボックスに下図のように計算結果がラジアンと度で表示されます。

使用前提 ・・・・・・・

戻り値を受け取る通常のバリアント変数を宣言して用意しておく。
直線の方向余弦を計算しておく

依存関係 ・・・・・・・

特になし

引数説明 ・・・・・・・

eVec1
eVec2

:最初の直線の方向余弦
:もう一つの直線の方向余弦

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

角度がラジアンで戻ります。 通常のバリアント変数で受けてください。

変数説明 ・・・・・・・

Alpha

計算結果の角度を一時保管する変数

注意点 ・・・・・・・

直線のなす角度はπ以下とπ以上の二種類ありまうが、ここで計算される角度は常にπ以下の角度ですのでもう一方の角度が必要な時は戻り値にそれなりの計算をして下さい。

 
スクリプト
'---2直線のなす角度-------------------------------------
function LinesAlph(eVec1,eVec2)
Dim Alpha
Alpha=XShade.Acos(eVec1(0)*eVec2(0)+eVec1(1)*eVec2(1)+eVec1(2)*eVec2(2))
LinesAlph=Alpha
end function
使用例
'2直線のなす角のテスト
'描画されるのは元のベクトルだけです。
'変数はスクリプトのtest()を参照
  dim Angle,eVec1,eVec2
  eVec1=normVec3(vec1)
  if Not IsArray(eVec1) then exit sub
  eVec2=normVec3(vec2)
  if Not IsArray(eVec2) then exit sub
  Angle=LinesAlph(eVec1,eVec2)
  drawVec pos0,vec1
  drawVec pos0,vec2
  XShade.Message "Angle(rad)="&Angle
  Angle=Angle*360/(2*XShade.PI)
  XShade.Message "Angle(degree)="&Angle
  XShade.SelectParent 1

sub_set03へ戻る