ÄВВЕДЕНИЕ
ÄРождение
Паскаля
ÄГрафические
возможности языка Паскаль
ÄРабота
в графическом видеорежиме. Общий обзор
ÄИнициализация
графического режима
ÄУправление
экраном и окнами
ÄУправление
цветом и фоном
ÄПостроение
простейших графических изображений
ÄУправление
курсором
ÄВывод
текстовой информации в графическом видеорежиме
ÄАлгоритм
построения окон и статических объектов в них
ÄДеловая
графика
ÄПостроение
графиков элементарных функций
ÄРеализация
имитации движения графических объектов
ÄСПРАВОЧНЫЕ
ТАБЛИЦЫ
ÄСправочные
материалы о
языке
Pascal
ÄТВОРЧЕСТВО
УЧАЩИХСЯ
ÄЗадания
для самостоятельного выполнения
ÄПостроение
функций второго порядка
ÄЭТО
ИНТЕРЕСНО
ÄЛИТЕРАТУРА
ÄКАРТА |
Пусть дана некоторая функция у = f(х). Рассмотрим прямоугольную область координатной плоскости,
которая определяется значениями:
xMin ≤ x ≤ xMax;
xMin ≤ x ≤ xMax;
Эту область назовём
областью функции, а
координаты (х, у) — мировыми координатами. Графиком функции
f(х) является некоторое конечное множество точек (хk,уk),
уk = f(xk), k=1, ..., n из области функции.
Выделим на экране компьютера прямоугольную
область, которую будем называть окном, в котором поместим
точечный график функции. В графическом режиме экран имеет другую
систему координат U и V.
Окно определяется значениями uMin, uMax,
vMin, vMax в координатах экрана. Нужно отобразить область
функции в окно так, чтобы каждой точке (хк, ук) в мировых
координатах соответствовала точка (Uк, Vк) в экранных
координатах.
Для перехода к координатам экрана определим
координаты преобразований:
(1)
рх, ру называются
коэффициентами сжатия, а
и b можно рассматривать как координаты точки на
экране, в которую переходит начало координат.
Пусть точка (xMin, yMin) переходит в точку
(uMin,vMax), а точка (хMах, уМах) переходит в точку
(uMax, vMin). Тогда, учитывая формулы (1), будем
иметь:
Из этих формул получим
коэффициенты рх, ру, а и Ь:
Учитывая формулы (2), опишем по шагам
алгоритм построения точечного графика функции у = f(х).
Шаг 1. Определим исходные данные uMin, uMax,
vMin, vMax, xMin, xMax, yMin, уМах, а также количество точек n=uMax
— uMin и шаг изменения х xStep=(xMax — xMin)/n.
Шаг 2. Нарисуем рамку, обрамляющую окно (это
будет прямоугольник, левый верхний угол которого имеет
координаты (uMin, vMin), а правый нижний угол — (uMax, vMax).
Шаг 3. Вычислим кооэффициенты сжатия рх и
ру по формулам (2).
Шаг 4. Нарисуем оси координат. Для этого
сначала преобразуем х в и, а у в v:
тогда ось OY будет
иметь координаты (u, vMin), (u, vMax), а ось ОХ будет иметь
координаты (uMin, v), (uMax, v).
Шаг 5. Строим график функции
y = f(x) из n точек, преобразовывая х в u, а у в v.
Пример построения графика
функции
Приведем программу построения
графика функции y=х2 — 5х + 6, используя
следующие исходные данные:
xMin= —2; yMin= —2;
xMax = 10; уМах=10.
uses Graph;
Const uMin=50; uMax=600; vMin=50; vMax=450;
{Окно графика функции}
Var grDriver: integer;
grMode: integer;
xStep:real; {Шаг по х}
n,k:integer; {Число точек графика}
x,y,px,py:real;
xMin, yMin,yMax, xMax:real;{Область функции}
Procedure Grlnit;
Begin
grDriver:=Detect;
InitGraph(grDriver,grMode,'');
IF GraphResult<>0 then
begin
Writeln('Ошибка инициализации!');
writeln('Работа программы прервана');
Halt(1)
end
End;
Function xScr(x: real):integer;
{Преобразование координаты х в u}
begin
xScr:=Round((x-xMin)*px+uMin);
end;
Function yScr(y:real):integer;
{Преобразование координаты y в v}
begin
begin
yScr:=Round((y-yMax)*py+vMin);
end;
Function f(x:real):real;
{Вид функции}
begin
f:=X*X-5*X+6;
end;
Begin
{Ввод исходных значений области функции}
write('xMin='); readln(xMin);
write('xMax='); readln(xMax);
write('yMin='); readln(yMin);
write('yMax='); readln(yMax);
px:=(uMax-uMin)/(xMax-xMin);
py:=-(vMax-vMin)/(yMax-yMin);
Grlnit;
{Построение рамки прямоугольника}
SetLineStyle(0,0,3);
Rectangle(uMin,vMin,uMax,vMax);
{Построение осей координат}
SetLineStyle(0,0,1);
If (xMin<0) and (xMax>0) then
Line (xScr(0),vMin,xScr(0),vMax);
If(yMin<0) and(yMax>0) then
Line(uMin,yScr(0),uMax,yScr(0));
{Определение количества точек графика}
n:=uMax-uMin;
{Вычисление шага}
xStep:=(xMax-xMin)/n;
x:=xMin;
{Вывод графика в виде n точек желтого цвета, преобразовывая при этом
х в u, у в v}
for k:=1 to n do
begin
y:=f(x);
if(y> yMin) and (y<yMax) then PutPixel(xScr(x),yScr(y),Yellow);
x:=x+xStep
end;
readln;
Closegraph
End.
|