Вращаем вокруг оси x, когда
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(n1 * n1 + n2 * n2 + n3 * n3);
r2[2, 2] = D / L; r2[2, 3] = -n3 / 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];
//Рисуем отражение объекта перпендикулярно x-z плоскости:
MatrixIdentity(ref S); S[2, 2] = -1;
//Комбинируем матрицы:
m3MatMultiply(ref M12, ref T, ref R1);
m3MatMultiply(ref M34, ref r2, ref S);
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);
}
//Строим матрицу преобразования для поворота на угол theta
//вокруг линии, проходящей через (p1, p2, p3)
//в направлении <d1, d2, d3>.
//Угол theta откладывается против часовой стрелки,
//если мы смотрим вниз в направлении,
//противоположном направлению линии:
public void m3LineRotate(ref float[,] M,
float p1, float p2, float p3,
float d1, float d2, float d3, float theta)
{
float[,] T = new float[5, 5]; //Перенос.
float[,] R1 = new float[5, 5]; //Вращение 1.
float[,] r2 = new float[5, 5]; //Вращение 2.
float[,] Rot3 = new float[5, 5]; //Вращение.
float[,] R2i = new float[5, 5]; //Стоп вращению 2.
float[,] R1i = new float[5, 5]; //Стоп вращению 1.
float[,] Ti = new float[5, 5]; //Стоп переносу.
float D, L;
float[,] M12 = new float[5, 5];
float[,] M34 = new float[5, 5];
float[,] M1234 = new float[5, 5];
float[,] M56 = new float[5, 5];
float[,] M567 = new float[5, 5];
//Переносим плоскость к началу координат:
MatrixTranslate(ref T, -p1, -p2, -p3);
MatrixTranslate(ref Ti, p1, p2, p3);
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий