sub_set02へ戻る

名称 ・・・・・・・

変換マトリックスの合成

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

transMat

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

2つの変換マトリックスを合成した変換マトリックスを返す。

使用例実行前 使用例実行後
使用前提 ・・・・・・・

戻り値を受け取る通常のバリアント変数(配列では無く)を宣言して用意しておく。
2つの変換マトリックスを用意しておく

依存関係 ・・・・・・・

特になし

引数説明 ・・・・・・・

mat1
mat2

(in)最初の変換マトリックス 配列[mat(3,3)]形式
(in)次の変換マトリックス 配列[mat(3,3)]形式

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

4行4列の合成変換マトリックス 配列[mat(3,3)]形式

変数説明 ・・・・・・・

newMat(3,3)
i,j,k

:マトリックスを保持する変数
:カウンタ用変数

注意点 ・・・・・・・

最初の引数の変換マトリックスに次の引数の変換マトリックスをかける。
引数の順番により結果が異なるので注意。

 
スクリプト
'--変換マトリックスの合成
Function transMat(mat1,mat2)
'2つの変換マトリックスを合成する。Mat1をMat2で変換する
'戻値--4行4列の合成変換マトリックス 配列[mat(3,3)]形式
'引数--
' mat1  :(in)最初の変換マトリックス 配列[mat(3,3)]形式
' mat2  :(in)次の変換マトリックス 配列[mat(3,3)]形式

  Dim newMat(3,3)      ':マトリックスを保持する変数
  Dim i,j,k            ':カウンタ用変数

  for i=0 to 3
    for j=0 to 3
      newMat(i,j)=0
      for k=0 to 3
        newMat(i,j)=newMat(i,j)+mat1(i,k)*mat2(k,j)
      next
    next
  next
  transMat=newMat
End Function
使用例
'複合変換テスト
'線形状が入っているパートを選択して実行してください
'Y軸を中心にπ/3回転、X軸を中心にπ/3回転したものを平行移動する。
'角度の単位はラヂアンです。
  dim mat0
  dim Dt(2),Angle

  Dt(0)=100: Dt(1)=100: Dt(2)=100
  Angle=XShade.pi/3
  mat0=GetTransMat()
  mat0=transMat(mat0,RoteMatY(Angle))
  mat0=transMat(mat0,RoteMatX(Angle))
  mat0=transMat(mat0,MoveMat(Dt))
  applyTransMat(mat0)

sub_set02へ戻る