Фгоу впо сибирский федеральный университет
ИНСТИТУТ КОСМИЧЕСКИХ И ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА «СИСТЕМЫ ИСКУССТВЕННОГО ИНТЕЛЛЕКТА»
Компьютерная геометрия и графика
Лабораторная работа №_
Геометрические преобразования на плоскости
Выполнили:
студенты гр. …..
Петров Е.А.
Сидоров В.П.
Проверил:
Сиротин Э.Е.
г. Красноярск 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.