Листинг 37.1. Код выше и в теле метода Form1_Load.
//Вводим функцию для изображаемой поверхности z = f(x, y):
double f1;
double f(double x, double y)
{
//Параметры поверхности z = f(x, y)для эллипсоида:
double a = 1.03;
double b = 1.02;
double c = 1.01;
//Уравнение поверхности z = f(x, y) в виде эллипсоида:
f1 = Math.Sqrt(c * c * (200 - x * x / (a * a) –
y * y / (b * b)));
return f1;
}
//Точка наблюдения:
myClassPoint3D myEye = new myClassPoint3D();
//Концы числового интервала области задания поверхности:
const int x_max = 20;
const int y_max = 20;
const int x_min = -10;
const int y_min = -10;
//Массив узловых точек:
myClassPoint3D[,] Points = new myClassPoint3D[x_max + 1, y_max + 1];
//Точки на осях координат:
myClassPoint3D[] Axes = new myClassPoint3D[4];
//Загрузка данных и их инициализация:
private void Form1_Load(object sender, EventArgs e)
{
//Задаем координаты точки наблюдения:
myEye = new myClassPoint3D(40, 20, 20);
//Объявляем координаты точки:
double x, y, z; int i, j;
//В каждом (i,j)-м узле плоскости x,y
//рассчитываем координату z точки пов-ти z = f(x, y):
for (i = 0; i <= x_max; i++)
{
x = i + x_min;
for (j = 0; j <= y_max; j++)
{
y = j + y_min;
//Координата z точек пов-ти z = f(x, y):
z = f(x, y);
Points[i, j] = new myClassPoint3D(x, y, z);
}
}
//Инициализация осей (axes) координат:
Axes[0] = new myClassPoint3D(0, 0, 0);
Axes[1] = new myClassPoint3D(30, 0, 0);
Axes[2] = new myClassPoint3D(0, 30, 0);
Axes[3] = new myClassPoint3D(0, 0, 30);
}
Чтобы мы могли рисовать заданную поверхность и оси координат внутри графического элемента PictureBox, в панели Properties (для этого элемента) на вкладке Events дважды щелкаем по имени события Paint. Появляется файл Form1.cs с шаблоном (метода pictureBox1_Paint), который после записи кода принимает такой вид.