Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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






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

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

Задача: Нарисовать горизонтальный ряд окружностей радиусом 100 на расстоянии 1000 от верхнего края экрана и с такими горизонтальными координатами 500, 800, 1100, 1400, ¼, 2900.

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

Private Sub Command1_Click()

Circle (500, 1000), 100

Circle (800, 1000), 100

Circle (1100, 1000), 100

Circle (1400, 1000), 100

Circle (1700, 1000), 100

Circle (2000, 1000), 100

Circle (2300, 1000), 100

Circle (2600, 1000), 100

Circle (2900, 1000), 100

End Sub

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

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

Придумаем для первого параметра переменную величину, например, х. Немного изменим программу:

Private Sub Command2_Click()

x = 500

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

Circle (x, 1000), 100: x = x + 300

End Sub

Здесь последний оператор x = x + 300 я написал только для красоты, от него нет никакой пользы, хотя и вреда тоже особого нет.

Эта программа рисует абсолютно то же самое, что и предыдущая, но она проще нее, так как не пришлось самим вычислять координаты.

Что мы видим? Мы видим, что программа состоит из нескольких одинаковых фрагментов. Это прямое приглашение применить цикл:

Dim x As Long

Private Sub Command3_Click()

x = 500

Do Until x > 2900

Circle (x, 1000), 100

x = x + 300

Loop

End Sub

Эта программа тоже рисует абсолютно то же самое, что и две предыдущие, но она короче. Здесь я перестраховался и объявил переменную x, как целую. Иначе при многократном прибавлении 300 могло бы оказаться, что результат равен не 2900, а, скажем, 2900.0000067 (Такой же случай я рассматривал в 6.4). А это значит, что последняя окружность не была бы нарисована. Можно было бы перестраховаться по-другому: вместо Do Until x > 2900 написать Do Until x > 2901.

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

Задание 64:. Удлините трубу налево и направо до краев формы.

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

 

 

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

Private Sub Command4_Click()

x = 500

y = 200

Do Until x > 2900

Circle (x, y), 100

x = x + 300

y = y + 200

Loop

End Sub

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

 

Задание 66: " Очередь трассирующими". Нарисуйте ряд точек по направлению из левого нижнего угла в правый верхний.

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

Задание 68: “Компакт-диск” и " Летающая тарелка ". Если радиус самого маленького “круга на воде” будет порядка 500, а самого большого - во весь экран, и если радиусы соседних окружностей будут различаться на 10-30 твипов, то на экране вы увидите привлекательный “компакт-диск”. Сделайте его золотым (Yellow). Если получилось, то сделайте ему внутренний и наружный ободки другого цвета. А теперь " положите" диск, то есть нарисуйте его не из окружностей, а из эллипсов, сжатых по вертикали. Получится " летающая тарелка".

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

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

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

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

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

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

 

 

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

Задание 75: Нарисуйте шахматную доску. Помощь: Здесь основные трудности возникнут при раскраске клеток в шахматном порядке. У Волчёнкова [См. список литературы] я встретил такую идею, касающуюся того, какие клетки закрашивать, а какие нет: Те клетки, у которых сумма номеров строки и столбца четная - закрашивать, остальные - нет.

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

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

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

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






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.