Графические построения

При построении графических изображений Вы использовали только одну из известных Вам алгоритмических структур (СЛЕДОВАНИЕ). Освоение других структур позволяет использовать их для получения сложных графических изображений.

Рассматривая некоторое изображение в виде совокупности одноименных объектов (точек, отрезков и т.д.), можно прийти к пониманию возможности использования для получения всего изображения алгоритмической структуры ПОВТОРЕНИЕ.

Примеры программ:

Пример 1. Получение изображения отрезка прямой. Пусть требуется получить изображение горизонтального отрезка с началом в точке (0, 240). Будем рассматривать отрезок как совокупность точек, и использовать для получения изображения отрезка процедуру PutPixel. Поместим ее в тело цикла с параметром For. Таким образом получим изображение 640 точек с координатами (k, 240) при k=0, 1, 2, 3, …, 639; в результате соседние пиксели сольются в горизонтальный отрезок. Program PUT_LINE; Uses Graph ; Var a, b, k : Integer ; Begin a:=Detect ; InitGraph (a, b, '') ; {горизонтальная прямая} For k:=0 To 639 do PutPixel (k, 240, 14) ; {14 – желтый цвет} Readln ; CloseGraph End.
Пример 2. Получение изображения семи параллельных отрезков равной длины. 0 100 500 639     Требуемое изображение можно рассматривать как совокупность отрезков. Концы отрезков: (100, y), (500, y), где y=50; 90; …; 290; значение y изменяется с шагом 40. Таким образом, можно организовать цикл While с условием выполнения цикла y ≤ 290. В цикле будем использовать процедуру вывода отрезка прямой и изменение значения y на 40 (величину шага). Эта идея реализована в программе LINE7_1 (метод 1). Возможно также использование цикла с параметром For, где параметр цикла (например, переменная k) указывает количество полученных изображений отрезка: k = 1, 2, …, 7. Тело цикла имеет такой же вид, как и в методе 1. Данная идея реализована в программе LINE7_2. Program LINE7_1; {метод 1} Uses Graph ; Var a, b, y: Integer ; Begin a:=Detect; InitGraph (a, b, ''); y:=50; While y<=290 Do Begin Line (100, y, 500, y); y:=y+40 End; Readln; CloseGraph End.
Program LINE7_2; {метод 2} Uses Graph ; Var a, b, k, y: Integer ; Begin a:=Detect; InitGraph (a, b, ''); y:=50; For k:=1 to 7 do Begin Line (100, y, 500, y); y:=y+40 End; Readln; CloseGraph End.
Пример 3. Использование счетчика случайных чисел позволяет получать случайно расположенные на экране изображения. Покажем это на примере программы вывода на экран заданного количества случайно расположенных точек: 1) программа предлагает ввести количество требуемых точек (N); 2) случайным образом формирует координаты точки 0 ≤ x ≤ 639, 0 ≤ y ≤ 479 и цвет точки 1 ≤ C ≤ 15; 3) изображает точку на экране, замедляя на миллисекунды процесс перехода к получению изображения следующей точки (регулирует скорость рисования). Переменная k – параметр цикла (счетчик), целочисленная переменная, которая используется для подсчета количества выводимых точек. Program STARS; {Звездное небо} Uses Crt, Graph ; Var a, b, N, k, x, y, C: Integer ; Begin ClrScr; Write ('Количество точек='); Readln (N); Randomize; a:=Detect; InitGraph (a, b, ''); For k:=1 To N do Begin x:= Random (640); y:= Random (480); C:= Random (15)+1; PutPixel (x, y, C); Delay (1000) End; Readln; CloseGraph End.
Пример 4. Программа закраски прямоугольника различными цветами: смена цвета должна осуществляться после нажатия на клавишу “Enter”. Пример основан на выполнении многократных действий: получение изображения прямоугольника, заполненного некоторым цветом. Пусть i – номер цвета заполнения; i = 0, 1, 2, …, 15. Таким образом, уместно использование цикла For. В цикле следует задать стиль заполнения области (1 – сплошной текущий цвет) и изобразить закрашенный прямоугольник, например, с диагональными точками (220, 200), (450, 300). Program BAR_16; Uses Graph ; Var a, b, i : Integer ; Begin a:=Detect ; InitGraph (a, b, '') ; For i:=0 To 15 do Begin SetFillStyle (1, i); Bar (220, 200, 450, 300); Readln End; CloseGraph End.

Возможность выбора построения того или иного изображения, представленная в алгоритме (и соответственно, в программе) в виде некоторой вариативности, обеспечивается использованием алгоритмической структуры ВЕТВЛЕНИЕ.

Примеры программ:

Пример 5. Написать программу, которая по желанию пользователя выведет на экран изображение треугольника или прямоугольника.
Пусть Р – переменная, по значению которой пользователь будет принимать решение о выводе требуемого изображения: треугольника (при Р = 1) или прямоугольника (при Р ≠ 1). 0 180 240 320 400 480 639     Будем получать изображение треугольника с вершинами в точках (240, 70), (400, 370), (180, 300), а прямоугольника – в диагональных точках (240, 70) и (480, 300). Program TRE_PR; Uses Graph ; Var a, b : Integer ; P : Byte ; Begin Writeln ('Сделайте выбор:') ; Writeln ('1 - треугольник') ; Writeln ('не 1 - прямоугольник'); Readln (P); a:=Detect; InitGraph (a, b, ''); If P=1 Then Begin Line (240, 70, 400, 370); Line (400, 370, 180, 300); Line (180, 300, 240, 70) End Else Rectangle (240,70,480,300); Readln; CloseGraph End.

1. Напишите программы получения изображений:

1) десяти параллельных вертикальных отрезков равной длины; 2) шахматной доски;

3) пешеходного перехода; 4) случайного количества случайно расположенных окружностей (треугольников, отрезков).

2. С клавиатуры задаются значения двух переменных. Если они равны, выведите на экран изображение равнобедренного, иначе – разностороннего треугольника.

3. С клавиатуры задаются значения длин сторон параллелограмма. Если они равны, выведите на экран изображение квадрата, иначе – прямоугольника.

4. Напишите программу закраски произвольного треугольника различными цветами (смена цвета должна осуществляться после нажатия на клавишу “Enter”).

* 5. Напишите программу, которая по желанию пользователя выведет на экран изображение равнобедренного, равностороннего или разностороннего треугольника, квадрата, прямоугольника, параллелограмма или ромба.