Матрица поворота в 3Д подскажите, люди!

evgenych

Задача:
дано вектор1 (x1,y1,z1 вектор2 (x2,y2,z2)
Надо найти матрицу поворота (размер 3*3) такую, что после поворота вектора1, он станет коллинеарен вектору2.
Какой у этой матрицы вид?
Вот такая простенькая задачка.
зы.
Матрица поворота A=(a11,a12,a13;a21,a22,a23;a31,a32,a33); , |A|=1;
x1(после поворота)=x1*a11+y1*a21+z1*a31
y1(после поворота)=x1*a12+y1*a22+z1*a32
z1(после поворота)=x1*a13+y1*a23+z1*a33

nazare

Поворота вокруг чего?
Если повороты относительно осей, то их матрицы поворотов:
X
1 0 0
0 cos sin
0 -sin cos
Y
cos 0 -sin
0 1 0
sin 0 cos
Z
cos sin 0
-sin cos 0
0 0 1
Перемножаешь матрицы, подставляешь в свое уравнение и вместо 9 переменных матрицы получаешь 3 угла поворота на 3 уравнения.

evgenych

МОжно подумать они будут линейными
В любом случае подскажите способ попроще.

slsf

в принципе тебе уже многое подсказали. Чем пользоваться можно ?

evgenych

Формулами, типа элементы матрицы равны = функции (над множеством элементарных от значений x1,y1,z1,x2,y2,z2

natunchik

static public Matrix GetRotationMatrix(Vector3 from, Vector3 to)
{
Matrix result = Matrix.Identity;
float eps = 0.000001f;
float phi;
float h;
float lambda;
Vector3 w;
w = Vector3.Cross(from, to);
phi = Vector3.Dot(from, to);
lambda = Vector3.Dot(w, w);
if (lambda > eps)
h = (1.0f - phi) / lambda;
else
h = lambda;

float hxy = w.X * w.Y * h;
float hxz = w.X * w.Z * h;
float hyz = w.Y * w.Z * h;
result.M11 = phi + w.X * w.X * h;
result.M12 = hxy - w.Z;
result.M13 = hxz + w.Y;
result.M21 = hxy + w.Z;
result.M22 = phi + w.Y * w.Y * h;
result.M23 = hyz - w.X;
result. = hxz - w.Y;
result.M32 = hyz + w.X;
result.M33 = phi + w.Z * w.Z * h;
return result;
}
Оставить комментарий
Имя или ник:
Комментарий: