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

       

Постановка задачи и проектирование формы


Листинг 35.1. Метод для рисования геометрических изображений.

    private void pictureBox1_Paint(object sender,

PaintEventArgs e)

    {

        //Объявляем индексы элементов всех массивов:

        int i, j, k;

        //Задаем границы индексов 1-го массива myArrayVC(i, j):

        int N_x = 201; int N_y = 2;

        //Объявляем 1-й массив myArrayVC(i, j) переменных float,

        //когда i = 0,1,2,3,...,(N_x - 1);

        //      j = 0,1,2,3,...,(N_y - 1):

        float[,] myArrayVC = new float[N_x, N_y];

        //Для считывания из файла

        //по адресу D:\\MyDocs\\MyTest3D_Graphics.txt

        //координат изображения в массив myArrayVC(201, 2)

        //создаем объект sr класса StreamReader:

        StreamReader sr =

            new StreamReader(

            @"D:\\MyDocs\\MyTest3D_Graphics.txt");

        //Считываем из файла MyTest3D_Graphics.txt

        //координаты изображения в массив myArrayVC(201, 2)

        //при помощи метода ReadLine:

        for (i = 0; i <= N_x - 1; i++)

      for (j = 0; j <= N_y - 1; j++)

               myArrayVC[i, j] =

                  Convert.ToSingle(sr.ReadLine());

        sr.Close();

        //Рисуем первое изображение по координатам из массива.

        //Объявляем координаты двух точек:

        float x1, y1, x2, y2;

        //Будем рисовать пером myPen толщиной 3:

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

        //Объявляем переменные для начала N_first_line

        //и конца N_last_line цикла при рисовании:

        int N_first_line, N_last_line;

        //Передаем переменным для начала и конца цикла

        //значения первых двух элементов массива myArrayVC:

        N_first_line = Convert.ToInt32(myArrayVC[0, 0]);

        N_last_line = Convert.ToInt32(myArrayVC[0, 1]);

        //Рисуем изображение, начиная с точки (1,0; 1,1):

        i = -1;

        for (k = N_first_line; k <= N_last_line; k++)

        {

            i = i + 2;

            x1 = myArrayVC[i, 0];


            y1 = myArrayVC[i, 1];

            x2 = myArrayVC[i + 1, 0];

            y2 = myArrayVC[i + 1, 1];

            e.Graphics.DrawLine(myPen, x1, y1, x2, y2);

        }

        //Задаем границы индексов 2-го массива myArrayVC_2(i, j):

        int N_x_2 = 201;

        int N_y_2 = 2;

        //Объявляем 2-й массив myArrayVC_2(i, j) перем-х float,

        //когда i = 0,1,2,3,...,(N_x_2 - 1);

        //      j = 0,1,2,3,...,(N_y_2 - 1):

        float[,] myArrayVC_2 = new float[N_x_2, N_y_2];

        //Для считывания из файла

        //по адресу D:\\MyDocs\\MyTest3D_Graphics_2.txt

        //координат изображения в массив myArrayVC_2(201, 2)

        // создаем объект sr_2 класса StreamReader:

        StreamReader sr_2 = new StreamReader(

            @"D:\\MyDocs\\MyTest3D_Graphics_2.txt");

        //Считываем из файла MyTest3D_Graphics_2.txt

        //координаты изображения в массив myArrayVC_2(201, 2)

        //при помощи метода ReadLine:

        for (i = 0; i <= N_x - 1; i++)

      for (j = 0; j <= N_y - 1; j++)

                myArrayVC_2[i, j] =

                  Convert.ToSingle(sr_2.ReadLine());

        sr_2.Close();

        //Рисуем второе изображение по координатам из массива.

        //Будем рисовать пером myPen толщиной 1:

        Pen myPen_2 = new Pen(Color.Black, 1);

        //Объявляем переменные для начала N_first_line

        //и конца N_last_line цикла при рисовании:

        int N_first_line_2, N_last_line_2;

        //Передаем переменным для начала и конца цикла

        //значения первых двух элементов массива myArrayVC:

        N_first_line_2 = Convert.ToInt32(myArrayVC_2[0, 0]);

        N_last_line_2 = Convert.ToInt32(myArrayVC_2[0, 1]);

        //Рисуем изображение, начиная с точки (1,0; 1,1):

        i = -1;

        //for (k = 1; k <= 3; k++)

        for (k = N_first_line_2; k <= N_last_line_2; k++)

        {

            i = i + 2;

            x1 = myArrayVC_2[i, 0];

            y1 = myArrayVC_2[i, 1];

            x2 = myArrayVC_2[i + 1, 0];

            y2 = myArrayVC_2[i + 1, 1];

            e.Graphics.DrawLine(myPen_2, x1, y1, x2, y2);

        }

    }

Аналогично по этой методологии мы можем разработать другие приложения для построения различных пространственных изображений.


Содержание раздела