ВУЗ:
Составители:
Рубрика:
Размер холста картинки измеряется в пикселах (точках), количества которых являются це-
лыми числами. Кроме того, как это принято в программировании, начало координат (0, 0) на-
ходится в левом верхнем углу. Координата X
(э)
увеличивается слева направо, а координата Y
(э)
– сверху вниз.
Если мы хотим изобразить на холсте график, мы должны решить две задачи:
1. растянуть или сжать реальный график до размеров картинки;
2. сместить начало координат из левого верхнего угла картинки в центральную область.
Сам график, очевидно, следует строить по отдельным точкам.
Таким образом, построение графика также можно разбить на несколько стадий:
• расчет коэффициентов масштабирования kx и ky;
• расчет смещения центра координат;
• расчет значений текущих реальных координат для каждой выводимой точки графика;
• переход от реальных (в общем случае дробных) координат к экранным (целочислен-
ным) и вывод точек с этими координатами на холст.
Формулы для расчета приведены ниже в приложении.
Далее надо определить процедуры, выполняющиеся при нажатии кнопок btnGrid и
btnGraph. Готовые процедуры будет выглядеть так:
procedure TfrmMain.btnGridClick(Sender: TObject);
var
i: byte;
Dx,Dy: single;
begin
a:=25; b:=25;
Nx:=10; Ny:=10;
with imgGraph.Canvas do
begin
// черный фон для графика
brush.color:=clBlack;
rectangle(0,0,imgGraph.width,imgGraph.height);
// внешняя рамка координатной сетки
pen.color:=clGray;
rectangle(a,b,imgGraph.width-a,imgGraph.height-b);
// вертикальные линии
Dx:=(imgGraph.width-2*a)/Nx;
for i:=1 to Nx-1 do
begin
MoveTo(round(a+i*Dx),b);
LineTo(round(a+i*Dx),imgGraph.height-b);
end;
// горизонтальные линии
Dy:=(imgGraph.height-2*b)/Ny;
for i:=1 to Ny-1 do
begin
MoveTo(a,round(b+i*Dy));
LineTo(imgGraph.width-a,round(b+i*Dy));
end;
end;
end;
procedure TfrmMain.btnGraphClick(Sender: TObject);
var
i: word;
Offset_x, Offset_y: word;
Npix: word;
xmin,xmax,ymin,ymax,dx: single;