#include #include using namespace std; using namespace Eigen; int main() { Vector3d v1(1,1,0), n1(0,0,1); Vector3d p0(120,0,0), p1(2,3,4), p2 = p0; p2.z() += 10; Vector3d v2 = p1 - p0; Vector3d n2 = v2.cross(p2 - p0); //n2.normalize(); Matrix3d mt1 = Quaterniond::FromTwoVectors(v1,v2).matrix(); n1 = mt1 * n1; Matrix3d mt2 = Quaterniond::FromTwoVectors(n1, n2).matrix(); Matrix3d mt = mt2 * mt1; Vector3d scale(v2.x() / v1.x(), v2.y() / v1.y(), v2.z() / v1.z()); Vector3d in1(0,1,0), in2(1, 0,0); in1 = mt * in1 * scale; in2 = mt * in2 * scale; char buf[1024]; sprintf(buf,"(%f %f %f) (%f %f %f) \n", in1.x(), in1.y(), in1.z() , in2.x(), in2.y(), in2.z()); cout << buf; }