Программное построение изображений

Для рисования линий можно использовать методы:

MoveTo(XH, YH) - установка невидимого курсора в начало линии;

LineTo(XK, YK) - проведение линии до точки XK,YK.

Обращение к этим методам осуществляется по общим правилам - с помощью составного имени, например, если имя объекта Image1, то

Image1.Canvas.MoveTo(X1, Y1); .

При создании изображения и , в частности, при построении графиков необходимо иметь в виду, что

- положение точки на экране определяется в пикселях, т.е. координаты точки - числа целого типа;

- начало отсчета располагается в левом верхнем углу, причем ось У направлена вниз.

Это означает, что при построении графиков необходимо предусматривать масштабирование формул и соответствующим образом пересчитывать координаты.

Рассмотрим построение графика на примере функции

У = А*Х2 . (1)

1. Выбор масштабов

Пусть Х и У реальные координаты, а Хр и Ур координаты в пикселях. Введем переменные

Ур=Му*У, и Хр = Мх * Х (2)

где Му и Мх масштабные коэффициенты.

Из соотношений (2) запишем

У = Ур / Му ; Х = Хр / Мх (3)

Подставим Х и У в заданную функцию

Ур = А * Хр2 {Му / Мх2} .

Очевидно, что коэффициент в фигурных скобках можно вычислять один раз.

, Создадим проект в котором имеется поле Edit для ввода коэффициента А и кнопка "график", при щелчке на которой в поле Image строится график функции (1). Вид окна проекта приведен на рис.5.31.1.

 

Рис.5.31.1

 

Текст модуля формы для данного примера приведен на листинге 31.1.

Листинг 31.1.

unit UniGraph3;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,

StdCtrls, ExtCtrls;

type

TForm1 = class(TForm)

Image1: TImage;

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.Button1Click(Sender: TObject);

Var

A,Y,MX,My,K:extended;

X0,Y0,X,i:integer;

begin

a:=StrToFloat(edit1.Text); {преобразование в число}

X0:=50; Y0:=100; {начало координат}

My:=0.5; Mx:=20; K:=My/Sqr(Mx);

With Image1.Canvas Do Begin

Pen.Color:=clBlue; {установка цвета карандаша для осей}

MoveTo(X0,Y0);LineTo(X0+200,Y0); {рисование оси Х}

MoveTo(X0,Y0+50); LineTO(X0,Y0-50); {рисование оси У}

Pen.Width:=2;

MoveTo(X0,Y0);

For i:=1 To 200 Do Begin

X:=X0+i; Y:=a*K*i*i;

LineTo(Х,Y0-Round(У));

End;

End;

end;

end.