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

       

Изображение объектов


Imports System.Math 'Для математических функций.

Imports System.Drawing 'Для рисования изображений.

Imports System.Drawing.Drawing2D 'Для рисования.

6. В тело этого класса Class1 записываем, для примера, следующую произвольную функцию для расчета массива с координатами точек графика.

Листинг 43.1. Метод для расчета массива с координатами точек графика.

Public Class Class1

    Public Function myFunction1() As Object

        'Объявляем индексы элементов массива myArrayVB(i, j):

        Dim i, j As Integer

        'Задаем границы индексов массива myArrayVB(i, j):

        Dim N_x As Integer = 2000

        Dim N_y As Integer = 1

        'Массив переменных Single в виде myArrayVB(i, j),



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

        Dim myArrayVB(N_x, N_y) As Single

        'Задаем произвольное значение 10 в двойном цикле:

        For i = 0 To N_x

            For j = 0 To N_y

                myArrayVB(i, j) = 10

            Next

        Next

        'Произвольные координаты 4-х точек ломаной линии:

        myArrayVB(0, 0) = 100

        myArrayVB(0, 1) = 50

        myArrayVB(1, 0) = 200

        myArrayVB(1, 1) = 75

        myArrayVB(2, 0) = 300

        myArrayVB(2, 1) = 150

        myArrayVB(3, 0) = 400

        myArrayVB(3, 1) = 300

        Return myArrayVB

    End Function

End Class

Листинг 43.2. Процедура PictureBox1_Paint для рисования.

    Private Sub PictureBox1_Paint(ByVal sender As Object, _

    ByVal e As System.Windows.Forms.PaintEventArgs) _

    Handles PictureBox1.Paint

        'Объявляем объект myObject класса Class1 компонента VB:

        Dim myObject As New ComponentVB.Class1

        'Объявляем индексы элементов массива myArrayVC(i, j):

        Dim i, j As Integer

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

        Dim N_x As Integer = 2000

        Dim N_y As Integer = 1

        'Объявляем массив myArrayVC(i, j) переменных типа float,

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


        '      j = 0,1,2,3,...,(N_y - 1):
        Dim myArrayVB_Client(N_x, N_y) As Single
        'Экспортируем массив myArrayVB(i, j) компонента VB
        'в массив myArrayVB_Client(i, j) клиента VB:
        For i = 0 To N_x
            For j = 0 To N_y
              myArrayVB_Client(i, j) = myObject.myFunction1(i, j)
            Next
        Next
        'Рисуем изображение из массива.
        'Объявляем координаты двух граничных точек:
        Dim x1, y1, x2, y2 As Single
        'Будем рисовать пером myPen толщиной 3:
        Dim myPen As New Pen(Color.Black, 3)
        'Рисуем линию, заданную в массиве myArrayVB_Client(i, j):
        x1 = myArrayVB_Client(0, 0)
        y1 = myArrayVB_Client(0, 1)
        x2 = myArrayVB_Client(1, 0)
        y2 = myArrayVB_Client(1, 1)
        e.Graphics.DrawLine(myPen, x1, y1, x2, y2)
        x1 = x2
        y1 = y2
        x2 = myArrayVB_Client(2, 0)
        y2 = myArrayVB_Client(2, 1)
        e.Graphics.DrawLine(myPen, x1, y1, x2, y2)
        x1 = x2
        y1 = y2
        x2 = myArrayVB_Client(3, 0)
        y2 = myArrayVB_Client(3, 1)
        e.Graphics.DrawLine(myPen, x1, y1, x2, y2)
    End Sub
Листинг 43.3. Метод pictureBox1_Paint для рисования.
private void pictureBox1_Paint(object sender,
PaintEventArgs e)
{
   //Объявляем объект myObject кл. Class1 компонента VB:
   ComponentVB.Class1 myObject =
   new ComponentVB.Class1();
   //Объявляем индексы элементов массива myArrayVC(i, j):
   int i, j;
   //Задаем границы индексов массива myArrayVC(i, j):
   int N_x = 2001; int N_y = 2;
   //Объявляем массив 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];
   //Объявляем вспомогательный массив myArray класса Array
   //и связываем его с функцией  myFunction1, которая
   //возвращает массив myArrayVB(i, j) компонента VB:
   Array myArray = (Array)myObject.myFunction1();


   //Экспортируем массив myArrayVB(i, j) компонента VB
   //в массив myArrayVC[i, j] клиента VC:
   for (i = 0; i <= N_x - 1; i++)
         for (j = 0; j <= N_y - 1; j++)
               myArrayVC[i, j] =
               Convert.ToSingle(myArray.GetValue(i,j));
   //Рисуем изображение из массива.
   //Объявляем координаты двух граничных точек:
   float x1, y1, x2, y2;
   // Будем рисовать пером myPen толщиной 3:
   Pen myPen = new Pen(Color.Black, 3);
   //Рисуем линию, заданную в массиве myArrayVC[i, j]:
   x1 = myArrayVC[0, 0];
   y1 = myArrayVC[0, 1];
   x2 = myArrayVC[1, 0];
   y2 = myArrayVC[1, 1];
   e.Graphics.DrawLine(myPen, x1, y1, x2, y2);
   x1 = x2; y1 = y2;
   x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1];
   e.Graphics.DrawLine(myPen, x1, y1, x2, y2);
   x1 = x2; y1 = y2;
   x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1];
   e.Graphics.DrawLine(myPen, x1, y1, x2, y2);
}
         Листинг 43.4.
Метод pictureBox1_Paint для рисования.
private:
System::Void pictureBox1_Paint(System::Object^  sender,
System::Windows::Forms::PaintEventArgs^  e)
{
    //Объявляем объект myObject класса Class1 компонента VB:
    ComponentVB::Class1^ myObject =
    gcnew ComponentVB::Class1();
    //Объявляем индексы элементов массива myArrayVC(i, j):
    int i, j;
    //Задаем границы индексов массива myArrayVC(i, j):
    int N_x = 2001; int N_y = 2;
    //Объявляем массив 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);
    //Объявляем вспомогательный массив myArray класса Array
    //и связываем его с функцией  myFunction1, которая
    //возвращает массив myArrayVB[i, j] компонента VB:
    Array^ myArray = (Array^)myObject->myFunction1();
    //Экспортируем массив myArrayVB(i, j) компонента VB
    //в массив myArrayVC[i, j] клиента VC:
    for (i = 0 ; i <= N_x - 1; i++)
        for (j = 0 ; j <= N_y - 1; j++)
            myArrayVC[i, j] =
            Convert::ToSingle(myArray->GetValue(i,j));
    //Рисуем изображение из массива.
    //Объявляем координаты двух граничных точек:
    float x1, y1, x2, y2;
    //Будем рисовать пером myPen толщиной 3:
    Pen^ myPen = gcnew Pen(Color::Black, 3);
    //Рисуем линию, заданную в массиве myArrayVC[i, j]:
    x1 = myArrayVC[0, 0];
    y1 = myArrayVC[0, 1];
    x2 = myArrayVC[1, 0];
    y2 = myArrayVC[1, 1];
    e->Graphics->DrawLine(myPen, x1, y1, x2, y2);
    x1 = x2; y1 = y2;
    x2 = myArrayVC[2, 0]; y2 = myArrayVC[2, 1];
    e->Graphics->DrawLine(myPen, x1, y1, x2, y2);
    x1 = x2; y1 = y2;
    x2 = myArrayVC[3, 0]; y2 = myArrayVC[3, 1];
    e->Graphics->DrawLine(myPen, x1, y1, x2, y2);
}

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