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


         

Глава Расчет и изображение линий уровня на поверхности


Листинг 40.1. Код выше и в теле метода Form1_Load.

//Вводим функцию для поверхности z = f1 = f(x, y):

public float f(float x, float y)

{

      float f1;

      f1 = 2 * x * x * x * x - 3 * x * x + 4 * y * y;

      return f1;

}

//Вводим функцию для частной производной df/dx:

public float df_dx(float x, float y)

{

      float f2;

      f2 = 8 * x * x * x - 6 * x;

      return f2;

}

//Вводим функцию для частной производной df/dy:

public float df_dy(float x, float y)

{

      float f3;

      f3 = 8 * y;

      return f3;

}

//Объявляем перо для рисования линий уровня:

Pen myPen;

//Загружаем функции для рисования линий уровня:

private void Form1_Load_1(object sender, EventArgs e)

{

      //Создаем экземпляр пера с цветом и толщиной:

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

      //Связываем графический элемент PictureBox1

      //с объектом g класса Graphics:

      Bitmap bmp = new Bitmap(pictureBox1.ClientSize.Width,

                              pictureBox1.ClientSize.Height);

      Graphics g = Graphics.FromImage(bmp);

      //Определяем преобразования для масштабирования и 

      //рисования линий на PictureBox в интервале

      //-2 <= x <= 2, -1.5 <= y <= 1.5:

      float x_min = -2f;

      float x_max = 2f;

      float y_min = -1.5f;

      float y_max = 1.5f;

      g.ScaleTransform(bmp.Width / (x_max - x_min),

                       bmp.Height / (y_max - y_min));

      g.TranslateTransform(-x_min, -y_min,

      System.Drawing.Drawing2D.MatrixOrder.Prepend);

      //Вызываем функцию для рисования линий уровня:

      for (int LevelCurves = -3; LevelCurves <= 25;

      LevelCurves++)

      PlotLevelCurve(g, Convert.ToSingle(

      LevelCurves / 4),

      -4f, 4f, -4f, 4f, 0.05f, 1f, 1f, 0.002f);

      //Показываем результат рисования:

      pictureBox1.Image = bmp;

}

Ниже этого кода записываем следующие вспомогательные методы.

Листинг 40.2.

Вспомогательные методы.

//Находим точку на линии:

float initial_delta = 0.1f;




Содержание  Назад  Вперед