ВВЕРХ
ВНИЗ

Линии в Pascal: Line, LineTo, MoveTo

На предыдущих страницах мы говорили об точках в Паскале: изучили процедуры GetPixel (определить цвет данного пикселя) и PutPixel, SetPixel (задать данному пикселю определенный цвет – там мы строили линии и не только с помощью точек). Здесь рассмотрим одни из наиболее важных процедур в графике Паскаля – построение линий Line, LineTo и вспомогательная для последней MoveTo.

Так чем же отличаются Line и LineTo, и зачем нужна загадочная MoveTo?

Line(x1, y1, x2, y2) — Эта процедура соединяет отрезком точки (x1, y1) и (x2, y2).

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
uses
  GraphABC; { Подключаем графический модуль }

begin
  { Проводим отрезок от точки с координатами (50, 80)
  до точки с координатами (300, 400): }
  Line(50, 80, 300, 400)
end.


Теперь немного разукрасим отрезок и увеличим его толщину, так как в предыдущем примере по умолчанию цвет черный, а толщина линии 1 пиксель:

Код PascalABC, PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
uses
  GraphABC; //Подключаем модуль для рисования в графическом окне

begin
  SetWindowTitle('Отрезок'); //Заголовок окна
  SetPenWidth(3); //Толщина отрезка 3 пикселя
  SetPenColor(clRed); //Цвет отрезка - красный
  { Проводим отрезок от точки с координатами (50, 80)
  до точки с координатами (300, 400): }
  Line(50, 80, 300, 400)
end.

Ниже представлены примеры программ случайных появляющихся отрезков в PascalABC.Net и Turbo Pascal/Free Pascal:



Line(x1, y1, x2, y2, C) – Проводит отрезок от точки (x1, y1) до точки (x2, y2), закрашивая отрезок цветом C. Есть только в PascalABC.Net. Толщина линии при этом равна 1 пиксель и её изменить нельзя.

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
9  
uses
  GraphABC;
 
begin
  randomize;
  { Проводим отрезок от точки (100,150) до точки (400,300),
  закрашенный случайным цветом clrandom: }
  Line(100, 150, 400, 300, ClRandom)
end.

MoveTo(x, y) – Устанавливает начальную точку (позицию) рисования в (x, y). Если эту процедуру не задействовать, то начальная точка по умолчанию принимается за (0, 0) – левый верхний угол окна. Процедура MoveTo используется совместно с LineTo (см. ниже).

LineTo(x, y) – Рисует отрезок от точки, в которой на данный момент находится конец отрезка (текущая позиция), до точки (x, y); начальная позиция задается с помощью MoveTo (см. выше), а новая позиция переходит в точку (x, y). Данная процедура задействуется при построении последовательной цепочки линий (отрезков) – когда конец каждой линии является одновременно началом следующей.

Код PascalABC.Net, PascalABC
1  
2  
3  
4  
5  
6  
7  
8  
9  
10  
11  
12  
uses
  GraphABC; //Подключаем модуль для рисования в графическом окне
 
begin
  SetWindowTitle('Треугольник'); //Заголовок окна
  SetPenWidth(3); //Толщина сторон треугольника 3 пикселя
  SetPenColor(clRed); //Цвет сторон - красный
  MoveTo(100, 50);  //Ставим первую точку (100,50)
  LineTo(500, 200); //Проводим отрезок к точке (500,200)
  LineTo(300, 400); //Проводим отрезок к точке (300,400)
  LineTo(100, 50)   //Проводим отрезок к первоначальной точке
end.

А как нарисовать звезду в паскале? Ниже представлен пример программы для рисования звезды в PascalABC.Net с указанным количеством концов. Все комментарии с в коде:



LineTo(x, y, C) — Рисует отрезок от точки, в которой на данный момент находится конец отрезка (текущая позиция), до точки (x, y) цветом C. Начальная позиция задается с помощью MoveTo, а новая позиция переходит в точку (x, y). Толщина линии при этом равна 1 пиксель.

Код PascalABC.Net
1  
2  
3  
4  
5  
6  
7  
8  
uses
  GraphABC;
 
begin 
  SetPenWidth(10); { Толщина отрезка 10px не влияет на результат! }
  MoveTo(100, 120); //начальная позиция рисования в точке (100,200)
  LineTo(400, 300, ClRed) //рисуем отрезок к точке (400,300) красным цветом
end.

LineTo(x, y) действует следующим образом. Пусть необходимо построить ломаную с вершинами в 10 точках (x0, y0), (x1, y1), (x2, y2), ..., (x9, y9). Для этого, естественно, можно использовать описанную выше процедуру Line(...) и построить следующую последовательность линий:

1) Line(x0, y0, x1, y1); 2) Line(x1, y1, x2, y2); 3) Line(x2, y2, x3, y3); ...; 9) Line(x8, y8, x9, y9).

Но в таком случае точки (x1, y1), (x2, y2), ..., (x8, y8) будут строится два раза – в конце предыдущего и начале следующего отрезков. Здесь можно проще поступить: процедурой MoveTo(x0, y0) задаем начальную точку ломаной линии, а после 9 раз используем процедуру LineTo:

 1) LineTo(x1, y1); 2) LineTo(x2, y2); 3) LineTo(x3, y3); ... 9) LineTo(x9, y9).

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

На этом все о линиях в паскале. А пока, если вам понадобится длительное хранение зерна, то вам не обойтись без сушильного шкафа от экан - он сохраненяет питательные вещества и соответствует стандарту ГОСТ.


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