包含平移和旋转变换:
#include <iostream> #include <GTEngine/Mathematics/GteConvertCoordinates.h> using namespace gte; // #define Vector4<double> 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<<": " <<Y[i]<<std::endl; } return 0; } matlab codes: // >> 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
本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:


