Вращаем вокруг оси x, когда
//Вращаем вокруг оси z,
//пока линия не окажется в y-z плоскости:
MatrixIdentity(ref R1);
D = (float)Math.Sqrt(d1 * d1 + d2 * d2);
R1[1, 1] = d2 / D; R1[1, 2] = d1 / D;
R1[2, 1] = -R1[1, 2]; R1[2, 2] = R1[1, 1];
MatrixIdentity(ref R1i);
R1i[1, 1] = R1[1, 1]; R1i[1, 2] = -R1[1, 2];
R1i[2, 1] = -R1[2, 1]; R1i[2, 2] = R1[2, 2];
// Вращаем вокруг оси x, когда линия будет по оси y:
MatrixIdentity(ref r2);
L = (float)Math.Sqrt(d1 * d1 + d2 * d2 + d3 * d3);
r2[2, 2] = D / L; r2[2, 3] = -d3 / L;
r2[3, 2] = -r2[2, 3]; r2[3, 3] = r2[2, 2];
MatrixIdentity(ref R2i);
R2i[2, 2] = r2[2, 2]; R2i[2, 3] = -r2[2, 3];
R2i[3, 2] = -r2[3, 2]; R2i[3, 3] = r2[3, 3];
//Вращаем вокруг линии (оси y):
MatrixYRotate(ref Rot3, theta);
//Комбинируем матрицы:
m3MatMultiply(ref M12, ref T, ref R1);
m3MatMultiply(ref M34, ref r2, ref Rot3);
m3MatMultiply(ref M1234, ref M12, ref M34);
m3MatMultiply(ref M56, ref R2i, ref R1i);
m3MatMultiply(ref M567, ref M56, ref Ti);
m3MatMultiply(ref M, ref M1234, ref M567);
}
//Строим матрицу преобразования (3-D transformation matrix)
//для переноса на Tx, Ty, Tz:
public void MatrixTranslate(ref float[,] M,
float Tx, float Ty, float Tz)
{
MatrixIdentity(ref M);
M[4, 1] = Tx; M[4, 2] = Ty; M[4, 3] = Tz;
}
//Строим матрицу преобразования (3-D transformation matrix)
//для поворота вокруг оси y (угол - в радианах):
public void MatrixYRotate(ref float[,] M, float theta)
{
MatrixIdentity(ref M);
M[1, 1] = (float)Math.Cos(theta);
M[3, 3] = M[1, 1];
M[3, 1] = (float)Math.Sin(theta);
M[1, 3] = -M[3, 1];
}
//Применяем матрицу преобразования к точке,
//где матрица не может иметь 0, 0, 0, 1
//в последнем столбце. Нормализуем только
//x и y компоненты результата, чтобы сохранить z информацию:
public void MatrixApplyFull(ref float[] V, ref float[,] M, ref float[] Result)
{
int i, j; float value = 0;
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий