Метод для вычисления матрицы преобразования
case Keys.Up:
phi = phi - delta_phi;
if (phi < -Math.PI / 2) phi = -Math.PI / 2;
break;
case Keys.Right:
theta = theta + delta_theta;
break;
case Keys.Down:
phi = phi + delta_phi;
if (phi > Math.PI / 2) phi = Math.PI / 2;
break;
}
//Изменяем координаты точки наблюдения:
myEye.orig_coord[0] = r1 * Math.Cos(theta);
myEye.orig_coord[1] = r1 * Math.Sin(theta);
myEye.orig_coord[2] = r2 * Math.Sin(phi);
//Перерисовываем изображение внутри PictureBox1:
pictureBox1.Invalidate();
return true;
}
Ниже записываем следующий метод.
Листинг 37.4. Метод CalculateTransformation.
// Метод для вычисления матрицы преобразования
//для текущей точки наблюдения:
myClassMatrix3D CalculateTransformation()
{
//Поворачиваем вокруг оси z,
//чтобы точка наблюдения оказалась в плоскости y-z:
myClassMatrix3D transformation1 =
myClassMatrix3D.GetZRotPointToYZ(myEye);
//Поворачиваем вокруг оси x,
//чтобы точка наблюдения оказалась на оси z:
myClassMatrix3D transformation2 =
myClassMatrix3D.GetXRotPointToZ(myEye);
//Проецируем по оси z, игнорируя координату z.
//Для этого умножаем матрицы преобразования:
return (transformation1.TimesMatrix(transformation2));
}
Ниже этого автоматически сгенерированного класса Form1:
public partial class Form1 : System.Windows.Forms.Form
{
}
вводим два новых класса с методами преобразования систем координат.
Листинг 37.5. Два новых класса.
//Вводим класс с методами преобразования систем координат
//в трехмерном пространстве:
public class myClassPoint3D
{
//Массив из 4-х элементов для первоначальных координат
//(original coordinates); нулевой индекс используем:
public double[] orig_coord = new double[4];
Содержание Назад Вперед