Если требуется провести прямую, получайте ее только по двум точкам.
Из законов Мэрфи
Одно из наиболее интересных применений графических средств Delphi – построение графиков функций. Давайте нарисуем на экране синусоиду, которую мы вычисляли на прошлой лабораторной работе. Форма должна иметь вид, показанный на рис. 4.
Рис. 4 – Форма программы построения графика функции.
Сама программа расчета не отличается от той, что мы делали в прошлый раз.
procedure TForm1.Button1Click(Sender: TObject);
VAR Xmin, Xmax, h, y: REAL;
cx,cy:REAL;
Begin
TRY
Xmin:=StrToFLoat(LabeledEdit1.Text);
Xmax:=StrToFLoat(LabeledEdit2.Text);
h:=StrToFLoat(LabeledEdit3.Text)
EXCEPT
MessageDlg('Неверные данные', mtError, [mbOK],0);
Exit
END;
IF Xmax<=Xmin THEN
BEGIN
MessageDlg('Xmin>Xmax!', mtError, [mbOK],0);
Exit
END;
Memo1.Lines.Clear;
WITH Image1.Canvas DO
BEGIN
Brush.Color:=clBlue;
FillRect(Image1.ClientRect);
// Ось Х
Pen.Color:=clWhite;
MoveTo(0,Image1.Height DIV 2);
LineTo(Image1.Width, Image1.Height DIV 2);
cx:=(Xmax-Xmin)/Image1.Width;
cy:=2/Image1.Height;
IF cy>cx THEN
cx:=cy;
MoveTo(0,Image1.Height DIV 2); // начало графика
WHILE Xmin<=Xmax DO
BEGIN
y:=sin(xmin);
Memo1.Lines.Add('sin('+FloatToStrF(Xmin,ffFixed,10,4)+')='+
FloatToStrF(y,ffFixed,10,4));
|
|
LineTo(TRUNC(Xmin/cx),Image1.height DIV 2 - TRUNC(y/cx));
Xmin:=Xmin+h
END
END
end;
Остановимся на командах построения графика. Сначала мы заливаем весь холст синим цветом и проводим посередине горизонтальную белую линию – это ось ОХ. Затем необходимо рассчитать масштабные коэффициенты по осям координат, чтобы при любых значениях Xmin, Xmax и h график уместился в окне. Для функции sin(x) очевидно, что по оси OY ее значения будут изменяться от –1 до 1, а по оси ОХ – от Xmin до Xmax. Коэффициенты по осям будут равны:
;
Из этих двух коэффициентов нужно выбрать наибольший, тогда весь график гарантированно уместится на холсте. Далее для получения экранных координат текущие значения x и sin(x) надо разделить на рассчитанный ранее максимальный коэффициент. Наконец, при построении графика его надо сместить вниз на половину высоты холста, поскольку ось ОХ проходит посередине. Обратите внимание на использование функции TRUNC для получения целочисленных значений координат.
Рис. 5 – Результат работы программы.