Листинг 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;