このC++コードは、完全には理解できないフォーラムで見つけました。行列/ベクトルの計算を実行するライブラリがないので、手動でそれを理解して機能を複製する必要があります。
2つのベクトル間のオイラー回転角を計算します..ロドリゲスの公式を使用します
vector $V1 = << my first vector >>;
vector $V2 = << my second vector >>;
vector $axis;
float $angle;
$angle = acos($V1*$V2);
$axis = normalizeVector((cross($V1,$V2)));
matrix $axis_skewed[3][3] = <<
0, (-$axis.z), ($axis.y) ;
($axis.z), 0, (-$axis.x) ;
(-$axis.y), ($axis.x), 0 >>;
matrix $eye3[3][3] = <<
1, 0, 0;
0, 1, 0;
0, 0, 1 >>;
ここから先は物事がトリッキーになります:
// here's Rodrigues
$R = $eye3 + sin($angle)*$axis_skewed + (1-cos($angle))*$axis_skewed*$axis_skewed;
eye3マトリックスのすべてのプロパティを追加しますか?
axis_skewed行列のすべてのプロパティを乗算しますか?
そしてRとは何ですか?ベクトルまたは行列?または番号?
これは簡単です。
matrix $vectorMatr[3][1];
$vectorMatr[0][0] = ($V1.x);
$vectorMatr[1][0] = ($V1.y);
$vectorMatr[2][0] = ($V1.z);
繰り返しますが、これは注意が必要です。
// $result is the resulting vector
$result = ($R * $vectorMatr);
ベクトルと行列を乗算して、標準の行列乗算を使用して結果のベクトルを取得しますか?
2つの行列を乗算してから、行列を使用して点を変換しますか?