Любое изображение формируется из достаточно простых геометрических фигур. Это точки, отрезки прямых, окружности и т.д. Из геометрии известно, что положение геометрического объекта и его форма задаются координатами его точек. Следовательно, для того, чтобы запрограммировать графический вывод, надо научиться задавать координаты графических объектов.
Графические координаты задают положение точки на экране дисплея. Поскольку минимальным элементом, к которому имеет доступ программист, является пиксель, естественно в качестве графических координат использовать порядковые номера пикселей. Допустимый диапазон изменения графических координат составляет [0,rx-1] для х-координаты и [0,ry-1] для y-координаты.
Точкой отсчета является верхний левый угол экрана. Значения х-координаты отсчитываются слева направо, а y-координаты – сверху вниз. Последнее отличает графические координаты от обычных декартовых координат, принятых в математике, и служит не иссякающим источником ошибок для начинающего программиста.
Проблема заключается в том, что при разработке программы график или другое изображение обычно проектируется в привычной для нас декартовой системе координат. Но для правильного отображения такого графика на экране необходимо учесть различие между декартовой и графической системами координат. Подчеркну, что таких различий три:
1. Графические координаты принимают только целочисленные значения.
2. Графические координаты принимают значения, ограниченные как снизу (нулевым значением), так и сверху (значением разрешения).
3. Графическая координата y отсчитывается сверху вниз.
Таким образом, декартовы координаты точки (x,y) для отображения ее на экране следует пересчитать в графические (xg,yg) по формулам
xg=|sx * x|+dx;
yg=ry-|sy * y|-dy,
где |x| - целая часть х; sx и sy – масштабные множители, выбираемые из условия
rx=|sx * xmax|+1,
ry=|sy * ymax|+1.
Здесь xmax и ymax – максимальные значения геометрических координат. Пересчет координаты y по такой же формуле, что и для х, привел бы к зеркально отраженному относительно горизонтальной линии изображению. Слагаемые dx и dy обеспечивают смещение изображения относительно левого верхнего угла экрана. Изображение будет смещено в центр экрана при
dx=|rx/2|,
dy=|ry/2|.
Чтобы изображение не зависело от разрешения, в Турбо Паскале используются функции GetMaxX и GetMaxY, возвращающие наибольший и номер пикселя по горизонтали и по вертикали соответственно. Графические координаты правого нижнего угла экрана равны (GetMaxX, GetMaxY).