Отдельно вроде все просто:
Нормализация:
Код:
public float length()
{
return (float)Math.Sqrt((X * X) + (Y * Y) + (Z * Z));
}
public xyzVector normalize()
{
float locLength = length();
float inv_length = (1 / locLength);
x *= inv_length;
y *= inv_length;
z *= inv_length;
return this;
}
И векторное произведение:
Код:
public static xyzVector cross(xyzVector v1, xyzVector v2)
{
return new xyzVector(
(v1.Y * v2.Z) - (v1.Z * v2.Y),
(v1.Z * v2.X) - (v1.X * v2.Z),
(v1.X * v2.Y) - (v1.Y * v2.X)
);
}
Если и так не понятно могу в числах ?
-- Вт ноя 16, 2010 16:38:00 --Даны трехмерные точки:
a = (-0.9, 4.7, 0.6)
b = (-2.1, 4.5, 1.1)
c = (-2.5, 3.2, 1.3)
Вычитаем (a-b) = (1.2, 0.2, -0.5)
Нормализуем полученное e1 = (0.89, 0.15, -0.42)
Векторное произведение (e1, c-b) = (-0.5, 0.05, -1.05)
Нормализуем полученное e3 = (-0.43, 0.04, -0.89)
Векторное произведение e2 = (e3, e1) = (0.12, -0.98, -0.10)
Собираем матрицу
0.89 0.12 -0.43
0.15 -0.98 0.04
-0.42 -0.10 -0.89
Что она описывает ?
-- Вт ноя 16, 2010 16:50:31 --Могу еще уточнить вопрос, если затем к этой матрице применять матрицы поворотов, то что собственно будет вращаться ?