
Фгоу впо сибирский федеральный университет
ИНСТИТУТ КОСМИЧЕСКИХ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА»
Компьютерная геометрия и графика
Лабораторная работа №_
Геометрические преобразования на плоскости
Выполнили:
студенты гр. …..
Петров Е.А.
Сидоров В.П.
Проверил:
Сиротин Э.Е.
г. Красноярск 2008 г.
1. Постановка задачи
Задание №18 (Вращающаяся стрелка)
Поворачивать любую фигуру, образованную замкнутой ломаной линией (стрелку), вокруг заданной точки на небольшой угол r по часовой или против часовой стрелки. Одну из линий стрелки выделите другим цветом. Совершить n поворотов.
Дополнение:
Добавьте в программу возможность менять направление вращения стрелки, и задавать новую точку, центр вращения, щелкая мышью на поверхности экрана.
2. Ход решения задачи.
Представим стрелку в виде четырехугольника следующей формы рис. 1.
Рис. 1. Вид стрелки и нумерация ее вершин.
Точку С – центр
стрелки разместим в центре окна, и
координаты вершин стрелки будем
рассчитывать, используя координаты
точки С как базисные. Примем, что
координаты точки С представлены вектором
.
Тогда, координаты точки 0 зададим как
вектор
,
точки 1 –
,
точки 2 -
,
точки 3 -
.
В однородных координатах, координаты
вершин стрелки будут следующими:
Для имитации вращения стрелки вокруг своего центра, необходимо над координатами всех вершин выполнять преобразование поворота относительно заданной точки на заданный угол. Координаты точки - центра вращения, это координаты точки С. Преобразование можно представить как комбинацию трех элементарных преобразований, а именно:
Преобразование параллельного переноса начала системы координат в точку С.
Преобразование поворота точек плоскости на заданный угол относительно начала новой системы координат.
Преобразование параллельного переноса начала системы координат на старое место.
В матричной форме запишем наше преобразование в виде произведения матриц
,
где M – результирующая матрица преобразования,
- матрица переноса
начала системы координат в точку С,
- матрица поворота
точек плоскости на угол φ
относительно
начала координат,
- матрица
преобразования переноса начала системы
координат на старое место.
Чтобы изобразить вращающуюся стрелку, применим следующий алгоритм:
Определим координаты центра окна cx и cy.
Рассчитаем на их основе координаты вершин стрелки, и занесем их в массив векторов.
Отобразим стрелку на поверхности окна.
Рассчитаем матрицу преобразования для поворота на угол 5◦ или -5◦ в зависимости от направления вращения стрелки, используя в качестве координат центра вращения, координаты cx и cy.
Применим полученную матрицу к векторам координат вершин стрелки.
Через небольшой промежуток времени, сотрем изображение стрелки на поверхности окна, и нарисуем ее заново, используя новые координаты вершин.
Будем повторять пункты 4 – 6 пока не будет получена команда на прекращение вращения.
Если пользователь произвел щелчок левой кнопкой мыши на поверхности окна, заменим координаты cx и cy на соответствующие координаты курсора мыши.
Примечание: пункт 8 выполняется параллельно с циклом 4 – 6.