1.2.Содержательная постановка задачи
Дан отрезок ОВ, ось и задан угол поворота α. Необходимо, основываясь на исходных данных, построить единую матрицу преобразований для поворота изображения на заданный угол относительно отрезка ОВ. Использовать при вычислениях матрицы поворота Mx(α), My(α), My(α), а также матрицы с промежуточными вычислениями.
2.Практическая часть
2.1.Алгоритм
Данная задача решается простым алгоритмом, описываемым следующими пунктами:
шаг1. Смещение заданного отрезка к началу координат;
шаг2. Поворот отрезка таким образом, чтобы он совпал с одной из плоскостей, содержащих заданную ось. Данный пункт подразумевает следующие действия:
Нахождение длины гипотенузы (Согласно теореме Пифагора), которая является проекцией отрезка на плоскость;
Вычисление косинуса и синуса угла между отрезком и плоскостью;
Заполнение матрицы поворота по оси (1), (2) или (3) полученными значениями косинуса и синуса;
Непосредственно, поворот отрезка (Путем умножения его точки, не лежащей в начале координат, на матрицу поворота).
шаг3. Поворот отрезка по второй плоскости, содержащей заданную ось (Аналогично шагу 2);
шаг4. Обработка промежуточных данных для получения единой матрицы преобразований.
2.2.Программная реализация
Алгоритм был реализован в среде разработки MS Visual Studio 2008, в виду наличия хороших библиотек для работы с графикой.
Программа была реализована как приложение Windows Forms. А её дизайн был выполнен в интуитивно понятном стиле, с применением таких компонентов среды разработки, как:
tabControl – элемент управления, который используется для отображения нескольких вкладок, аналогичных разделителям в записной книжке (в данном случае элемент использовался для разделения областей расчёта и построения графика);
textbox – текстовое поле для приёма данных (например, для ввода координат и величины угла вращения);
radioButton – элемент управления, обеспечивающий выбор из двух или более взаимоисключающих вариантов (в данном случае для выбора основной оси для расчёта);
listBox – элемент управления, отображающий список элементов, в котором можно выбрать один или несколько элементов (используется в программе для вывода результата вычислений);
button – элемент управления, позволяющий взаимодействовать с программой;
pictureBox – элемент управления, позволяющий отображать графику (в данном случае – отображать график);
label – элемент – заметка, позволяющий давать краткое пояснение к другим элементам.
Ниже приведены скриншоты интерфейса программы.
Рисунок 1-расчётная область
Рисунок 2-Область графического отображения
2.3.Пример 1
Для проверки правильности работы программной реализации алгоритма необходимо решить пример вручную, решить его в программе, затем сравнить результат.
В качестве исходных данных используются: Отрезок (2;3;1;)-(6;9;4) Ось OX Угол 30°
Переместим
отрезок в начало координат, умножив
его на инцидентную матрицу
.
Получим
новые координаты отрезка: (0;0;0;1)-(4;6;3;1).
Далее, повернем отрезок так, чтобы он совпал с осью OX. Для этого повернем его два раза – сначала так, чтобы он совпал с плоскостью XOZ, а затем так, чтобы он совпал с плоскостью XOY.
Для
первого поворота необходимо найти
синус и косинус угла, выводимые из
следующих отношений:
Y
6
β
O
3
Z
Теперь
умножим матрицу, соответствующую
конечной точке на вычисленную матрицу
и получим координату отрезка после
поворота.
.
Проводя
аналогичные вычисления, совместим
отрезок с осью OX,
вращая его вокруг OY:
z
6.7
β
0 4 x
Умножив
эту матрицу на конец отрезка, получим
новое его положение:
Составим матрицу поворота вокруг оси OX на 30°.
.
Составим матрицы M5, M6, M7 обратные M3, M2, M1 соответственно.
Составим
супер-матрицу, равную произведению
M1*M2*M3*M4*M5*M6*M7:
Для поворота любой точки необходимо умножить матрицу, соответствующую данной точке на супер-матрицу.
