Урок 8
Меню
Урок 10
|
Урок 9.
Случайные картинки
Наши картины до сих пор были монотонными и регулярными. Теперь давайте
попробуем рисовать фигуры, которые имеют случайные размеры и цвет (абстрактные
фигуры). Для этого им надо задавать случайные координаты, а как их получить?
В языке Basic для этого имеется специальная инструкция RND.
RND — это случайное число из отрезка [0, I].
Его можно использовать в арифметических выражениях
для вычисления чего угодно. Каждый раз, когда выполняется инструкция RND,
получаемое число будет уже другим. Вот пример программы, выводящей на
экран 5000 случайных точек случайного цвета.
SCREEN 7
FOR K=l TO 5000
X=RND*319
Y=RND*199
C=RND*15
PSET (X,Y), С
NEXT К
END
Программа состоит из цикла, который повторяется
5000 раз. В цикле вычисляются координаты X, Y, цвет С, и ставится точка
полученного цвета. Каждый раз при выполнении инструкции RND получается
новое число, принадлежащее отрезку [0, I]. Но так как координаты должны
принимать значения от 0 до 319 по Х и от О до 199 по Y (установлен режим
7), то RND приходится умножать на соответствующие коэффициенты.
Аналогично, цвет определяется числом от 0 до 15, поэтому для получения
случайного цвета RND умножается на 15.
Изменяя способ вычисления координат, можно варьировать области, в которые
попадают случайные точки. Вот два примера, где случайными точками заполняется
только небольшой прямоугольник и круг.
SCREEN 7
FOR K=l TO 5000
X=100+RND*100
Y=50+RND*100
C=RND*15
PSET (X,Y),C
NEXT К
END
SCREEN 7
FOR K=l TO 5000
X=100+RND*120
Y=40+RND*120
C=RND*15
IF (Х-160)^2+(У-100)^2 < 3600 THEN PSET (X,Y),C
NEXT К
END
Выполните эти программы и разберите, почему они работают именно так.
Вычислив несколько случайных координат, можно рисовать случайные линии,
прямоугольники окружности и т. д.
Задание
Напишите программы, которые выводят на экран
500 следующих фигур случайного цвета:
1) окружности фиксированного радиуса со случайным центром;
2) окружности случайного радиуса со случайным центром;
3) прямые линии со случайными концами;
4) прямоугольники случайного размера и расположения;
5) прямоугольники фиксированного размера и случайного расположения;
6) закрашенные прямоугольники случайного размера и расположения;
7) закрашенные прямоугольники фиксированного размера и случайного расположения;
8) закрашенные окружности фиксированного радиуса со случайным центром;
9) закрашенные окружности случайного радиуса со случайным центром;
10) линии, у которых один конец находится в фиксированной точке (например,
в центре экрана), а другой — в случайной;
11) вертикальные линии, у которых один конец находится в верхней строке
экрана (координаты (X, 0)), а второй — в случайной точке, лежащей точно
под верхней (координаты (X, Y)).
Напишите программы, которые выводят в случайные места экрана несколько
(10-50) следующих фигур случайного цвета.
Косой дождь
Снегопад
Воздушные шарики
Указание.
Нужно зафиксировать размеры каждой фигуры и параметризовать ее относительно
некоторой точки (X, Y) — начальной позиции рисования. Далее, выбирая случайным
образом эту позицию, можно получить изображения фигуры в разных местах
экрана.
Замечание.
На самом деле инструкция RND выдает не
совсем случайные числа, а некоторую последовательность псевдослучайных
чисел. Эта последовательность достаточно сильно “перемешана” так что в
первом приближении ее можно считать случайной. Однако каждый раз при запуске
программы последовательность псевдослучайных чисел будет одной и той же,
что станет заметно при выполнении программ из последнего упражнения.
Чтобы добиться иллюзии полной “случайности”,
можно начать просматривать эту последовательность с разных мест. Для этого
служит инструкция RANDOMIZE. Если в начало программы вставить строку
RANDOMIZE TIMER
то начало последовательности псевдослучайных чисел будет выбираться на
основании некоторой обработки текущего времени в компьютерных часах. Каждый
новый запуск программы будет происходить в разное время, поэтому и последовательность
псевдослучайных чисел каждый раз будет иной, и нам будет казаться, что
картинки совсем случайные.
В заключение приведем в качестве примера две более сложные программы,
рисующие красивые случайные “звездочки”.
Первая программа рисует одну звездочку с центром, определяемым точкой
(А, В). Звездочка имеет случайное количество исходных лучей (переменная
N), каждый из которых отражается так, чтобы звездочка имела четыре оси
симметрии:
SCREEN 9
RANDOMIZE TIMER
REM координаты центра звездочки
А= 320
В = 170
REM максимальные длины лучей по Х и Y
DX = 60
DY = 70
REM количество исходных лучей
N = RND * 10 + 1
REM цикл рисования каждого луча
FOR К = 1 ТО N
REM выбираем случайную длину и цвет луча
Х = RND * DX
Y = RND * DY
С = RND * 15
REM рисуем луч и все его отражения
LINE (А, В)-(А + X, В + Y), С
LINE (А, В)-(А — X, В — Y), С
LINE (А, В)-(А + X, В — Y), С
LINE (A, B)-(A — X, В + Y), С
LINE (A, B)-(A + Y, В + X), С
LINE (A, B)-(A — Y, В — X), С
LINE (A, B)-(A + Y, В — X), С
LINE (A, B)-(A — Y, В + X), С
NEXT К
END
Вторая программа рисует множество таких звездочек на фоне цветных прямоугольников.
Она фактически “зацикливает” первую программу, поэтому мы не будем повторять
относящиеся к ней комментарии:
DX= 24
DY= 24
REM цикл рисования рядов сверху вниз
FOR B=DY TO 349 STEP 2*DY
REM цикл рисования каждого ряда от центра к краям
I=1 : А=320
WHILE A+DX<=639 AND A-DX>=0
REM рисование прямоугольника и звезды
LINE(A-DX,B-DY)-(A+DX,B+DY),RND*15,BF
N = RND * 20 + 1
FOR К = 1 TO N
X = RND * DX : Y = RND * DY : С = RND * 15
LINE (A, B)-(A+X, B+Y), С
LINE (A, B)-(A-X, B-Y), С
LINE (A, B)-(A+X, B-Y), С
LINE (A, B)-(A-X, B+Y), С
LINE (A, B)-(A+X, B+Y), С
LINE (A, B)-(A-X, B-Y), С
LINE (A, B)-(A+X, B-Y), С
LINE (A, B)-(A-X, B+Y), С
NEXT К
REM вычисление новой позиции центра прямоугольника по Х
A=A+(-1)^I*2*I*DX
I=I+1
WEND
NEXT В
END
|
Урок 8
Меню
Урок 10
|