sub_set02へ戻る

名称 ・・・・・・・

座標データのマトリックスによる変換

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

transVecByMat

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

位置ベクトル(または方向ベクトル等)vecに変換matをかける

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

座標データ[vec(2)形式]と変換マトリックス[mat(3,3)形式]を用意しておく
呼び出し側で戻り値を受ける為に(配列ではなく)バリアント変数を用意しておく

依存関係 ・・・・・・・

特になし

引数説明 ・・・・・・・

vec
mat

:(in)元の位置ベクトル(または方向ベクトル等)配列[vec(2)]形式
:(in)適用する変換マトリックス 配列[mat(3,3)]形式

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

変換後の位置ベクトル(または方向ベクトル等)配列[vec(2)]形式

変数説明 ・・・・・・・

newVec(2)
i,j

:ベクトルを保持する変数
:カウンタ用変数

注意点 ・・・・・・・

vecとmatは配列構造が違うので引数の順番を間違わないように注意

 
スクリプト
'---座標データのマトリックスによる変換
Function transVecByMat(vec,mat)
'位置ベクトル(または方向ベクトル等)vecに変換matをかける
'戻値--変換後の位置ベクトル(または方向ベクトル等)配列[vec(2)]形式
'引数--
' vec   :(in)元の位置ベクトル(または方向ベクトル等)配列[vec(2)]形式
' mat   :(in)適用する変換マトリックス 配列[mat(3,3)]形式

  Dim newVec(2)   ':ベクトルを保持する変数
  Dim i,j         ':カウンタ用変数

  for i=0 to 2
    newVec(i)=0
    for j=0 to 3
      if j=3 then
        newVec(i)=newVec(i)+mat(j,i)
      else
        newVec(i)=newVec(i)+vec(j)*mat(j,i)
      end if
    next
  next
  transVecByMat=newVec
end Function
使用例

'■このテストは2点からなる開いた線形状を選択して '実行してください。(2番目のポイントに変換をかけます。) dim mat0 dim vec0(3) dim newVec dim j for j=0 to 2 vec0(j)=Xshade.AnchorPoint(1,j) next newVec=transVecByMat(vec0,RoteMatZ(XShade.pi/6)) for j=0 to 2 XShade.AnchorPoint(1,j)=newVec(j) next

sub_set02へ戻る