Построение графиков

График, как и любое графическое изображение, строится в Турбо-Паскале с помощью стандартных процедур модуля Graph, которые были описаны выше. Однако при этом возникают сложности, заключающиеся в следующем. Допустим, мы строим график функции y=sin x на интервале

[-p,p]. Поскольку современные мониторы имеют разрешение 640 точек по горизонтали на 480 точек по вертикали (VGA), то, очевидно, что если мы не увеличим график, то он будет располагаться в верхнем левом углу и практически не будет виден. Кроме того, часть точек, имеющих отрицательную координату x или y, вообще не будут отображаться на экране. Есть и еще одна проблема: нумерация точек на экране монитора по вертикали ведется сверху вниз, в то время как при построении графика значения y должны увеличиваться снизу вверх.

Таким образом, при построении графика возникает задача масштабирования изображения.

Рассмотрим рисунок (рис.34) Здесь внешняя рамка обозначает экран монитора, внутренняя – ту область экрана, в которой должен быть нарисован график. x1, x2 – границы интервала, на котором строится график (в данном случае x1 = -p, x2 = p). y1, y2 – пределы изменения функции на выбранном интервале (в данном случае y1 = -1, y2 = 1). Nx1, Nx2 – левая и правая границы рамки, Ny1, Ny2 – верхняя и нижняя границы. Для составления программы нам потребуются формулы, которые по известным значениям x и y позволяют определить Nx и Ny – координаты точки на экране монитора. В общем виде эти формулы могут быть записаны следующим образом:

Nx = DNx + Mx × (x - x1) ; Ny = DNy – My × (y - y1),

 
 

где DNx и DNy выражают смещение графика вдоль осей OX и OY; Mx, My – масштабные коэффициенты осей OX и OY; знак "–" во второй формуле выражает изменение направления оси OY.

Рис.34. График функции y=sin x

 

Значения DNx и Mx могут быть найдены из условий: при x=x1 Nx = Nx1, при x=x2 Nx = Nx2. DNx = Nx1, а Mx = (Nx2 – Nx1) / (x2x1).

Значения DNy и My могут быть найдены из условий: при y=y1 Ny = Nx2, при y=y2 Ny = Ny2. DNy = Ny2, а My = (Ny2 – Ny1) / (y2y1).

Пример программы построения графика функции y=sin x приведен ниже.

 

uses Graph;

{Описание функции y=sin(x)}

function f(x:real):real;

begin f:=sin(x) end;