3.7. Рисование окружностей и дуг

Френсис Хилл

Рис. 3.41. Логотип университета штата Массачусетс 3.6.14. Вращающиеся пентаграммы: анимация На рис. 3.42 изображена пентаграмма, повернутая на некоторый угол относительно Пентагона, причем соответствующие их вершины соединены. Напишите программу, анимирующую эту фигуру. Данная композиция нарисована с использованием некоторого начального угла А поворота пентаграммы. После короткой паузы эта пентаграмма стирается, а затем снова рисуется с немного большим углом А. Процесс повторяется до нажатия любой клавиши.

Френсис Хилл

Рис. 3.42. Вращающиеся пентафигуры

3.7. Рисование окружностей и дуг Рисование окружности эквивалентно рисованию я-угольника с большим числом вершин. Этотя-уголь-ник напоминает окружность (если его не изучать слишком пристально). Подпрограмма drawCircleO, представленная в листинге 3.13, рисует правильный 50-угольник методом простой передачи своих параметров в ngonO. Было бы более целесообразно написать drawCircleO с нуля, основываясь на коде листинга 3.11.

Листинг 3.13. Рисование круга на базе 50-угольника

void drawCircle(Point2 center, float radius) {

const int numVerts = 50:

ngon(numVerts. center.getXO. center.getYO. radius. 0):

}

3.7.1. Рисование дуг Множество фигур в искусстве, архитектуре и науке включают в себя дуги окружностей, расположенных согласно требованиям эстетики или целесообразности. Дугу удобно описывать положением центра с и радиусом R «порождающей» ее окружности, а также начальным углом а и углом ее развертки Ь. На рис. 3.43 показана такая дуга. Мы считаем, что при положительном Ъ дуга развертывается, начиная Глава 3. Дополнительные инструменты для рисования с а, против часовой стрелки (ССЛУ); если же Ъ отрицательно, то дуга развертывается по часовой стрелке (С\У). Окружность есть частный случай дуги с углом развертки 360°.

Френсис Хилл

Рис. 3.43. Задание дуги Нам нужна подпрограмма drawArcO, рисующая дугу окружности. Функция, приведенная в листинге 3.14, аппроксимирует дугу как часть и-угольника с использованием команд moveToO и lineToO. Последовательные точки дуги находятся вычислением cos( ) и sin( ) каждый раз внутри главного цикла. Если величина sweep отрицательна, то угол автоматически убывает.


⇐ Предыдущая| |Следующая ⇒