Читайте также:
|
|
Для построения графиков рекомендуем использовать компонент TPaintbox (вкладка System). В этом случае нет необходимости задавать положение области на форме.
Для того чтобы построить оси координат, нужно задать положение начала математической системы координат и масштабы каждой из осей. Подчеркнем, что отсчет положения начала системы координат ведется в пикселях от левого верхнего угла компонента TPaintbox. Обозначим через u 0 и v 0 расстояния до начала системы координат по горизонтали и вертикали соответственно. Масштабы по оси абсцисс и по оси ординат обозначим mx и my, их тоже следует задавать в пикселях. Переменные u 0, v 0, mx, my включим в список глобальных переменных.
Теперь перейдем непосредственно к построению графика. Сначала нам нужно создать процедуру (назовем ее xytouv), которая преобразовывала бы математические координаты в экранные. Алгоритм преобразования прост: значение математической координаты (вещественное число) умножается на масштаб, округляется функцией round и прибавляется к значению u 0 (положение начала координат). Это для оси абсцисс. Для оси ординат сложение следует заменить на вычитание, поскольку экранная координата отсчитывается «вниз».
Поместим эту процедуру в разделе implementation модуля Unit 1. Здесь x, y – математические координаты точки графика, а u, v – ее экранные координаты. Так как процедура xytouv возвращает экранные координаты u и v, то перед переменными u, v следует написать var.
procedure xytouv(x,y:real; var u,v:integer);
begin
u:=u0+round(x*mx);
v:=v0-round(y*my);
end;
Напишем функцию f (x), с помощью которой задается математическая формула функции. Для примера будем строить график функции y = 2sin x.
Function f (x: real): real;
begin
f:=2*sin(x);
end;
Затем выберем отрезок на оси абсцисс, на котором будет изображен график функции. Для линейний и квадратичной функций это может быть симметричный отрезок, например [−10; 10]. Для логарифмической функции необходимо выбирать отрезок в положительной части оси абсцисс, например, [0.01; 10]. Для функций синуса и косинуса можно взять любой отрезок, например [−p; p]. В нашем примере пусть будет отрезок [−2p; 2p]. Границы выбранного отрезка будут входными параметрами xmin и xmax для процедуры Graphic.
Будем менять переменную х на отрезке[ xmin; xmax ] с некоторым шагом dx, который подбираем экспериментально. Начинайте со значения, например, dx = 0,01. Для вывода точки на Paintbox 1 (или Form 1) используем свойство Pixels канвы Canvas. Ниже приведен код процедуры Graphic.
procedure Graphic(xmin, xmax, dx: real);
{xmin, xmax – минимальное и максимальное значения x,
dx – «шаг» построения}
var x,y:real; u,v:integer;
begin
x:=xmin; {присваиваем x минимальное значение}
while x<xmax do
begin
y:=f(x); {вычисляем y }
{Преобразуем математические координаты в экранные}
xytouv(x,y,u,v);
{Ставим точку зеленого цвета с координатами u,v}
Form1.Paintbox1.Canvas.Pixels[u,v]:=clgreen;
x:=x+dx; {увеличиваем x}
end;
end;
Вызовем процедуру graphic в коде обработчика TForm1.Button1Click (кнопка «Построить»).
procedure TForm1.Button1Click(Sender: TObject);
begin
Graphic(-2*pi, 2*pi, 0.01);
end;
В итоге получим график, изображенный на рис. 12.
Рис. 12. График функции y= 2sinx на отрезке [–2p; 2p].
Задание. Расширьте возможности приложения. Через компонент TMainMenu задайте несколько функций. Для этого в код функции f вставьте оператор выбора case, в котором разным номерам будут соответствовать различные функции.
2.2. Класс TBitmap и работа с растровыми рисунками
Дата добавления: 2015-08-20; просмотров: 100 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Для построения графиков | | | В случайных местах |