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




Глава Изображение и управление поверхностями в трехмерном пространстве - часть 2


Листинг 37.2. Методо pictureBox1_Paint для рисования поверхности.

private void pictureBox1_Paint(object sender,

PaintEventArgs e)

{

    //Масштабируем все графические объекты на PictureBox1.

    //Коэффициенты масштабирования:

    float M_1 = 29; float M_2 = 31;

    e.Graphics.ScaleTransform(pictureBox1.Width / M_1,

    -pictureBox1.Height / M_2, MatrixOrder.Append);

    float M_3 = 2; float M_4 = 2;

    e.Graphics.TranslateTransform(pictureBox1.Width / M_3,

    pictureBox1.Height / M_4, MatrixOrder.Append);

    //Задавая M_1, M_2, M_3, M_4 другие значения,

    //мы будем смещать поверхность по отношению к осям x,y,z.

    //Матрица преобразования (transformation matrix):

    myClassMatrix3D tr = CalculateTransformation();

    //Применяем матрицу преобразования к точкам:

    for (int x = 0; x <= x_max; x++)

        for (int y = 0; y <= y_max; y++)

            Points[x, y].Transformation(tr);

     //Объявляем индексы массива myArrayVCsharp[i, j]:

    int i, j;

    //Задаем границы индексов массива myArrayVCsharp[i, j]:

    int N_x = 2000; int N_y = 1;

    //Задаем массив myArrayVCsharp[i, j]переменных Single,

    //когда i = 0,1,2,3,...,N_x; j = 0,1,2,3,...,N_y:

    float[,] myArrayVCsharp = new float[N_x + 1, N_y + 1];

    //Первая, вторая и третья границы массива, разделяющие

    //линии поверхности, параллельные xz, yz, и оси:

    int N_1_myArrayCsharp = 0, N_2_myArrayCsharp = 0,

    N_3_myArrayCsharp = 0;

    //Рассчитываем элементы массива myArrayVCsharp[i, j]

    //для рисования линий поверхности,

    //параллельных плоскости координат xz:

    float x1, y1, x2, y2;

    Pen myPen = new Pen(Color.Black, 0);

    i = -2;//Задаем до циклов.

    for (int x = 0; x <= x_max; x++)

      {

            x2 =

            Convert.ToSingle(Points[x, 0].trans_coord[0]);

            y2 =

            Convert.ToSingle(Points[x, 0].trans_coord[1]);

            for (int y = 1; y <= y_max; y++)

            {

                  x1 = x2; y1 = y2;




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