flakeMotifO:
cvs.scale2D(1.0. -1.0):
cvs.rotate2D(60.0): // concatenate a 60-degree rotation // добавляем поворот на 60 градусов }
}
Пример 5.5.3. Шквал из снежинок Шквал из снежинок, подобный приведенному на рис. 5.40, можно создать посредством многократного рисования снежинки в случайных позициях. Вот соответствующий код на OpenGL:
while(! bored) {
cvs.initCTO:
cvs.translate2D(randon amount, random amount): II (аргументами являются два случайных числа) drawFlakeO:
}
Отметим, что СТ необходимо инициализировать каждый раз во избежание концентрации снежинок в одном месте.
Заказать любой сертификат на товар тут https://souzkachestva.ru/.
Рис. 5.40. Шквал из снежинок Пример 5.5.4. Создание узоров из мотива На рис. 5.41 показаны две конфигурации из мотивов динозавра. В обоих вариантах динозавры распределены вокруг окружности, но в одном случае каждый динозавр повернут так, что его ноги направлены к началу координат, а во втором случае все динозавры расположены вертикально. В обоих случаях для создания узора используется комбинация поворотов и перемещений. Интересно посмотреть, как на получающуюся картину влияет порядок операций.
Допустим, что подпрограмма drawDinoO рисует вертикального динозавра, помещенного в начало координат. На рис. 5.41, а система координат для каждого мотива вначале поворачивается вокруг начала на нужный угол, а затем перемещается вдоль своей оси у на Я единиц. Ниже приведен код, выполняющий эти операции. Отметим, что CT заново инициализируется на каждом шаге цикла, так что экземпляры не концентрируются в одном месте. Подумайте, какие преобразования вы использовали бы, если бы захотели создавать этот узор путем преобразования точек самого мотива.
const int numMotifs - 12"images/tmp8E4A-325.png">
а б Рис. 5.41. Два узора на основе одного мотива: а) каждый мотив повернут автономно; б) все мотивы расположены вертикально
⇐ Предыдущая| |Следующая ⇒