Изменить матрицу поворота прямоугольника от центра к углу - PullRequest
0 голосов
/ 07 мая 2020

Я пытаюсь повернуть прямоугольник вокруг одного из его углов, но могу сделать это только вокруг центра. Я использую Eigen вместе с libigl. Мой код:

// rectangle to rotate so as to be aligned to Y axis
MatrixXd V;

V.resize(24, 3);

V <<
-1.833111, -1.280510 , -0.000000,
2.124274 , -0.698183 , -0.000000,
-2.124274,  0.698183 ,  0.000000,
1.833111 ,  1.280510 ,  0.000000,
-1.978693,  -0.291164, -0.000000,
0.145582 ,  -0.989346, -0.000000,
1.978693 ,  0.291164 ,  0.000000,
-0.145582,  0.989346 ,  0.000000,
0.000000 ,  0.000000 ,  0.000000,
-1.905902,  -0.785837, -0.000000,
1.134928 ,  -0.843764, -0.000000,
1.905902 ,   0.785837,  0.000000,
-1.134928,   0.843764,  0.000000,
1.062137 ,  -0.349091, -0.000000,
-2.051483,   0.203510,  0.000000,
-0.843764,  -1.134928, -0.000000,
2.051483 ,  -0.203510, -0.000000,
0.843764 ,  1.134928 ,  0.000000,
-1.062137,  0.349091 ,  0.000000,
-0.072791,  0.494673 ,  0.000000,
0.989346 ,  0.145582 ,  0.000000,
0.916555 ,  0.640255 ,  0.000000,
-0.916555,  -0.640255, -0.000000,
0.072791 ,  -0.494673, -0.000000,
-0.989346,  -0.145582, -0.000000;

// right edge vector normalized (LSV) (with all combined edges summed)
Vector3d LSV;

LSV << 0.989346220797831, 0.145581782490286, 0;

axis = Vector3d::UnitY();

// calculate the rotation matrix so as to align the rectangle right edge to Y axis

Matrix3d RM;

RM = igl::rotation_matrix_from_directions(LSV, axis);

MatrixXd RV;

RV = V * RM;

V = RV;

igl :: rotation_matrix_from_directions по умолчанию вращает V вокруг своего центра. Теперь, когда у меня есть матрица вращения RM, я хотел бы преобразовать ее, чтобы повернуть прямоугольник вокруг правого нижнего угла. Является ли это возможным? Спасибо.

...