ВВЕРХ
ВНИЗ

Графика в Pascal

В этом разделе сайта progmatem.ru для рисования различных геометрических фигур в Паскале нам нам понадобится среда PascalABC.Net или PascalABC. Будут также привены рабочие программы в средах Turbo Pascal и Free Pascal. Вообще Паскаль хорош тем, что позволяет не только писать простые и/или сложные консольные приложения, но и работать с формами (как в Delphi), а также создавать графические приложения с помощью подключаемого модуля GraphABC (аналог модуля graph в Turbo Pascal, Free Pascal). Ведь для того и создавалась среда PascalABC.Net – как учебное пособие при переходе на Delphi – более совершенную версию Object Pascal.

При работе с графическим окном нужно учитывать две особенности. Во-первых, начало координат – точка (0, 0) – находится не где-то посредине окна, а в левом верхнем углу. Вторая особенность связана с первой: положительное направление оси OY показывает не вверх, а вниз (OX направлена вправо). Как мы видим, система координат в графическом окне Pascal отлична от той, к которой мы привыкли в математике – т.н. правой системе координат, в которой ось OX направлена вправо, ось OY – вверх, а начало координат, как правило, всегда стоит где-то посредине окна. И к этой особенности надо привыкать.

Система координат в графическом окне Паскаля

Но что делать, если требуется нарисовать геометрическую фигуру или график функции в «нормальной», привычной для нас системе координат? Надо выполнить преобразование системы координат таким образом, чтобы точка (0, 0) находилась посредине окна (в любой нужной точке), а ось OY была направлена вверх. Стандартное преобразование в прямоугольной правой системе координат выглядит следующим образом:

Стандартное преобразование координат

Здесь x0 и y0 – координаты точки, в которую мы хотим перенести начало координат новой системы, x и y – координаты точки в старой системе, x1 и y1 – координаты точки в новой системе. Но поскольку ось OY в графическом окне Паскаля направлена вниз, то для её разворота вверх нужно, естественно, знак координаты y поменять на противоположный (вместо y поставить -y). Таким образом, окончательно получим преобразование координат в графическом окне PascalABC.Net:

Преобразование координат в графическом окне Pascal

В результате последних преобразований вышеуказанная система координат будет иметь следующий вид:

Система координат после преобразования

Как мы видим, здесь начало координат перемещено в центр графического окна, а ось OY направлена вверх. В результате этого стали доступны не только положительные координаты, но также отрицательные.

Напишем простую программу, демонстрирующую все вышесказанное. Для этого, забегая наперед, укажем три полезные в графическом режиме PascalABC.Net процедуры:

TextOut(x,y,s) – Вывод текста в графическое окно. При этом текст (строка s) записывается в прямоугольную область таким образом, что точка с координатами (x, y) находится в левом верхнем углу первой буквы;

Line(x1,y1,x2,y2) – Проводит отрезок от точки (x1, y1) до точки (x2, y2);

Circle(x,y,r) – Рисует окружность с центром (x, y) и радиусом r.

Программа рисует окружность относительно графического окна (x0 = 0, y0 = 0), а через 3 секунды эта окружность появляется относительно нарисованной в центре системы координат. Перепишите эту программу в среду PascalABC.Net и запустите. Вот, собственно, сам код:

Код Pascal, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  
21  
22  
23  
24  
25  
26  
27  
28  
29  
30  
31  
uses
  GraphABC;

const
  r = 90; //радиус окружности

var
  x0, y0, x, y: integer;

begin
 { Начало координат: }
  x0 := WindowWidth div 2; //половина ширины окна
  y0 := WindowHeight div 2; //половина высоты окна
  x := 100; y := 100; //координаты центра окружности
  Line(x0 - 250, y0, x0 + 250, y0); //ось OX
  Line(x0, y0 - 200, x0, y0 + 200); //ось OY
  Circle(x, y, r); //окружность с центром (x, y) и радиусом r
  Circle(x, y, 2); //центр окружности (маленькая окружность)
  TextOut(x + 5, y, '(100, 100)');//надпись возле центра окружности
  sleep(3000); //делаем паузу на 3 секунды
  ClearWindow; //очищаем графическое окно белым цветом
  Line(x0 - 250, y0, x0 + 250, y0); //ось OX
  Line(x0, y0 - 200, x0, y0 + 200); //ось OY
 { Делаем преобразование координат: }
  x := x0 + x;
  y := y0 - y;
 { Рисуем окружность, центр окружности и надпись: }
  Circle(x, y, r);
  Circle(x, y, 2);
  TextOut(x + 5, y, '(100, 100)');
end.

Здесь необходимо сделать некоторые пояснения:

WindowWidth - ширина графического окна;

WindowHeight - высота графического окна (в пикселях);

ClearWindow - эта процедура очищает окно белым цветом;

sleep(ms) - задержка (пауза) на ms миллисекунд.

На следующей странице мы рассмотрим самое элементарное понятие в графике Паскаля  точки и пиксели, а также укажем полезные процедуры для работы с ними.



Яндекс.Метрика