Урок 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

Яндекс цитирования Rambler's Top100
Сайт создан в системе uCoz