Компьютерная графика, мультимедиа и игры на Visual C#


         

Метод для вычисления матрицы преобразования


            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];

Содержание  Назад  Вперед