gijyutsu-keisan.com

5.ベクトル演算

ベクトル演算に関する使い方を説明します。
ベクトル演算
FuncVecDot(vec1, vec2) ベクトルの内積
FuncVecNom(vec1) ベクトルの正規化(大きさを1にする)
FuncVecRot(vec1, ang, Optional ax) ベクトルの回転

ベクトルの内積

FuncVecDot(vec1, vec2)
戻り値 ベクトルの内積(二次配列)。
vec1
vec2
計算対象とする二次配列。
vec1、vec2は縦ベクトル、横ベクトルのどちらでも構いません。
VBAサンプルは次の通りです。
vec1としてセルB3~B5に、vec2にセルD3~D5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim vec1 As Variant
Dim vec2 As Variant

’セル値を配列に代入
vec1 = Range("B3:B5").Value
vec2 = Range("D3:D5").Value

’ベクトルの内積
tmp = FuncVecDot(vec1, vec2)

’結果出力
Range("F3").Value = tmp

End Sub
FuncVecDotは、Excel関数としても使えます。

ベクトルの正規化(大きさを1にする)

FuncVecNom(vec1)
戻り値 正規化したベクトル(二次配列)。
vec1 正規化対象となるベクトル(二次配列)。
VBAサンプルは次の通りです(列交換を例にとります)。
vec1にセルB3~B5に、下図のように数値を入力します。
Sub test()

Dim tmp As Variant
Dim vec1 As Variant

’セル値を配列に代入
vec1 = Range("B3:B5").Value

’ベクトルの内積
tmp = FuncVecNom(vec1)

’結果出力
Range("D3:D5").Value = tmp

End Sub
FuncVecNomは、Excel関数としても使えます。

ベクトルの回転

FuncVecRot(vec1, ang, Optional ax)
戻り値 回転後のベクトル(二次配列)。
vec1 回転対象となるベクトル(二次配列:(行,0))。
2行分のとき、平面内の回転。 3行分のとき、指定回転軸周りの回転。
ang 回転角(radianで指定)。
ax 回転軸の指定。
1=X軸周り、2=Y軸周り、3=Z軸周り(省略時)(省略可)
VBAサンプルは次の通りです。

(1)二次元の場合

vec1としてセルB3~B4に、回転角(deg)をD3に、下図のように数値を入力します。 D4はD3で入力した値をradianに換算したものです。
Sub test()

Dim tmp As Variant
Dim vec1 As Variant
Dim ang As Variant

’セル値を配列に代入
vec1 = Range("B3:B4").Value
ang = Range("D4").Value

’ベクトルの回転(二次)
tmp = FuncVecRot(vec1, ang)

’結果出力
Range(Cells(3, 6), Cells(3 + UBound(tmp, 1), 6 + UBound(tmp, 2))).Value = tmp

End Sub

(2)三次元の場合

vec1としてセルB3~B5に、回転角(deg)をD3に、回転軸をD5に、下図のように数値を入力します。 E3はD3で入力した値をradianに換算したものです。
Sub test()

Dim tmp As Variant
Dim vec1 As Variant
Dim ang As Variant
Dim angFlag As Integer

’セル値を配列に代入
vec1 = Range("B3:B5").Value
ang = Range("E3").Value

’ベクトルの回転軸
Select Case Range("D5").Value
Case "X"
angFlag = 1
Case "Y"
angFlag = 2
Case Else
angFlag = 3
End Select

’ベクトルの回転(三次)
tmp = FuncVecRot(vec1, ang, angFlag)

’結果出力
Range(Cells(3, 7), Cells(3 + UBound(tmp, 1), 7 + UBound(tmp, 2))).Value = tmp

End Sub
FuncVecRotは、Excel関数としても使えます。

参考文献