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

       

Изображение объектов в трехмерном пространстве на основе нового синтаксиса Visual C++


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

private: System::Void pictureBox1_Paint(

         System::Object^  sender,

         System::Windows::Forms::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):

    array<float,2>^ myArrayVC =



           gcnew array<float,2>(N_x, N_y);

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

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

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

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

    StreamReader^ sr = gcnew 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 = gcnew 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):
    array<float,2>^ myArrayVC_2 =
                    gcnew array<float,2>(N_x_2, N_y_2);
    //Для считывания из файла
    //по адресу D:\\MyDocs\\MyTest3D_Graphics_2.txt
    //координат изображения в массив myArrayVC_2(201, 2)
    // создаем объект sr_2 класса StreamReader:
    StreamReader^ sr_2 = gcnew 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 = gcnew 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 = 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);
    }
}
Аналогично по этой методологии мы можем разработать другие приложения для построения различных пространственных изображений.

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