Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Использование случайных величинпри рисовании




END.

END.

Используем в рисовании переменные величины

Если вы нарисовали снеговика, то наверное согласитесь, что для этого вам пришлось основательно потрудиться, хотя сам рисунок не слишком богат, в нем всего порядка десяти элементов.

Как заставить Паскаль короткой программой рисовать множество элементов? Ответ: применять циклы, используя в обращениях к графическим процедурам вместо чисел переменные величиныи арифметические выражения.

Задача: Нарисовать горизонтальный ряд окружностей радиусом 10 на расстоянии 100 от верхнего края экрана и с такими горизонтальными координатами 50, 80, 110, 140, ¼, 290.

Как видим, центры соседних окружностей отстоят друг от друга на 30. Вот примитивный фрагмент, решающий эту задачу:

Circle(50,100,10);

Circle(80,100,10);

Circle(110,100,10);

Circle(140,100,10);

Circle(170,100,10);

Circle(200,100,10);

Circle(230,100,10);

Circle(260,100,10);

Circle(290,100,10);

При вводе этой программы вас будет раздражать необходимость вводить много раз почти одно и то же. Воспользуйтесь копированием, которое объяснено в параграфе «Копирование и перемещение фрагментов текста» из части IV.

Мы видим, что здесь Паскаль 9 раз выполнит одну и ту же процедуру, причем при каждом следующем обращении первый параметр вырастает на 30.

А теперь решим эту же задачу при помощи цикла.

Придумаем для первого параметра переменную величину, например, х. Чтобы х изменялся, организуем цикл repeat. Вот программа решения задачи:

USES Graph;

VAR x, Device, Mode:Integer;

BEGIN
Device:=0;

InitGraph(Device, Mode, ’< путь к графическим драйверам> ’);

x:=50;

repeat
Circle(x,100,10);

x:=x+30;

until x>290;
ReadLn;

CloseGraph

Задание 69:. Попробуйте уменьшить расстояние между центрами окружностей, не изменяя их радиуса, нарисовав их плотнее, чтобы они пересекались, еще плотнее, пока они не образуют “трубу”.

Задание 70:. Удлините трубу налево и направо до краев экрана.

Задание 71:. Увеличьте толщину трубы.

 

Заставим окружности вести себя посложнее. Например, расположим их не по горизонтали, а по диагонали экрана в направлении от левого верхнего угла в правый нижний. Для этого организуем еще одну переменную - вертикальную координату у - и заставим ее тоже изменяться одновременно с x.

USES Graph;

VAR x, y, Device, Mode: Integer;

BEGIN
Device:=0;

InitGraph(Device, Mode, ’< путь к графическим драйверам> ’);

x:=50;

y:=20;

repeat
Circle(x,y,10);

x:=x+30;

y:=y+20;

until x>290;
ReadLn;

CloseGraph

Если мы захотим менять радиус, то организуем переменную R, тоже типа Integer.

 

Задание 72:. Нарисуйте ряд точек по направлению из левого нижнего угла в правый верхний.

Задание 73:. “Круги на воде”. Нарисуйте пару десятков концентрических окружностей, то есть окружностей разного радиуса, но имеющих общий центр.

Задание 74:. “Компакт-диск”. Если радиус самого маленького “круга на воде” будет порядка 50, а самого большого - во весь экран, и если радиусы соседних окружностей будут различаться на 2-3 пиксела, то на экране вы увидете привлекательный “компакт-диск”. Сделайте его золотым (Yellow).

Задание 75:. Не трогая x, а меняя только yи R, вы получите коническую башню.

Задание 76:. Меняя все три параметра, вы получите трубу, уходящую в бесконечность.

Задание 77:. Разлинуйте экран в линейку.

Задание 78:. А теперь в клетку.

Задание 79:. А теперь в косую линейку.

Задание 80:. Начертите ряд квадратов.

 

 

Чтобы получить богатые рисунки, нужно использовать богатые возможности Паскаля: вложенные циклы, ветвление внутри цикла и т.д., например:

Задание 81:. Нарисуйте шахматную доску.

Задание 82:. “Ковер”. В задании 69 вы рисовали горизонтальный ряд пересекающихся окружностей. Теперь нарисуйте один под другим много таких рядов.

Указания: Здесь вам понадобятся вложенные циклы. Если центры соседних окружностей отстоят друг от друга на одинаковое расстояние что по горизонтали, что по вертикали, и если удачно подобраны остальные числа, то у вас получится красивый ковер во весь экран с аккуратными краями.

Задание 83:. Пусть у этого ковра будет вырезан левый нижний угол.

Задание 84:. ¼ и вдобавок вырезан квадрат посередине.

Как получить случайное число? Давайте сначала напечатаем его. Для этого подойдет функция Randomиз 4.9. WriteLn(Random(100)) напечатает целое неотрицательное число, какое - мы заранее не знаем, знаем только, что меньше 100. Легко догадаться, что WriteLn (500 + Random(100)) напечатает случайное число из диапазона от 500 до 599.

Попробуем нарисовать “звездное небо”. Для этого достаточно в случайных местах экрана нарисовать некоторое количество разноцветных точек (скажем, 1000). Точка ставится процедурой PutPixel. Как сделать координаты и цвет точки случайными? Тот же Random. Если ваш экран имеет размер 640´480 пикселов, то обращение к процедуре рисования одной точки случайного цвета будет выглядеть так:

PutPixel (Random(640), Random(480), Random(16))

Число 16 взято по той причине, что все цвета в Паскале имеют номера от 0 до 15.

Для того, чтобы таких точек было 1000, используем цикл for:

for i:=1 to 1000 do PutPixel (Random(640), Random(480), Random(16))

Имейте в виду, что сколько бы раз вы не запускали программу с указанным фрагментом, картина созвездий на экране будет абсолютно одинакова. Если вам нужно, чтобы от запуска к запуску набор значений случайной величины менялся (а значит и созвездия), употребите разик до использования функции Random процедуру Randomize. Вот так:

Randomize;

for i:=1 to 1000 do PutPixel (Random(640), Random(480), Random(16))

Задание 85:. “Дождь в луже”. Заполните экран окружностями радиуса 20 в случайных местах.

Задание 86:. “Цирк”. То же самое случайных радиусов и цветов.

Задание 87:. “Звезды в окне”. Звездное небо в пределах прямоугольника.




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 409; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.