包含平移和旋转变换:
#include
#include
using namespace gte;
// #define Vector4 Vector<4, double>
int main(int argc, char const *argv[])
{
// // Affine change of basis.
ConvertCoordinates<4, double> convert;
Vector<4, double> X, Y, P0, P1, diff;
Matrix<4, 4, double> U, V, A, B;
bool isRHU, isRHV;
V.SetCol(0, Vector<4, double>{1.0, 0.0, 0.0, 0.0});
V.SetCol(1, Vector<4, double>{0.0, 1.0, 0.0, 0.0});
V.SetCol(2, Vector<4, double>{0.0, 0.0, 1.0, 0.0});
V.SetCol(3, Vector<4, double>{0.0, 0.0, 0.0, 1.0});
U.SetCol(0, Vector<4, double>{0.866, 0.5, 0.0, 0.0});
U.SetCol(1, Vector<4, double>{-0.5, 0.866, 0.0, 0.0});
U.SetCol(2, Vector<4, double>{0, 0, 1.0, 0.0});
U.SetCol(3, Vector<4, double>{10.0, 5.0, 0.0, 1.0});
convert(U, true, V, false);
isRHU = convert.IsRightHandedU(); // false
isRHV = convert.IsRightHandedV(); // true
X = { 3.0, 7.0, 0.0, 1.0 };
Y = convert.UToV(X); //
for(int i = 0; i < 4; i++)
{
std::cout<<"Y "<< i<<": " <> T
// T =
// 0.86600 -0.50000 0.00000 10.00000
// 0.50000 0.86600 0.00000 5.00000
// 0.00000 0.00000 1.00000 0.00000
// 0.00000 0.00000 0.00000 1.00000
// >> T * [1 0 0 0]'
// ans =
// 0.86600
// 0.50000
// 0.00000
// 0.00000
// >> T * [0 1 0 0]'
// ans =
// -0.50000
// 0.86600
// 0.00000
// 0.00000
// >> T * [0 0 1 0]'
// ans =
// 0
// 0
// 1
// 0
输出:
Y 0: 9.098
Y 1: 12.562
Y 2: 0
Y 3: 1