Uploaded by Илья Моисеев

Группы вращения и перемещения

advertisement
Группы вращений и перемещений
1. Напишите функцию, запрашивающую матрицу 2  2 или матрицу
3  3 . Необходимо определить, принадлежит ли введённая матрица
специальной ортогональной группе (SO(2) или SO(3)) или же нет. В
случае принадлежности функция должна вернуть True, иначе False
2. Напишите функцию, запрашивающую матрицу 3  3 или матрицу
4  4 . Необходимо определить, принадлежит ли введённая матрица
специальной евклидовой группе (SE(2) или SE(3)) или же нет. В
случае принадлежности функция должна вернуть True, иначе False
3. Напишите функцию, запрашивающую угол поворота. Функция
должна выводить матрицу SO(2) для данного угла.
4. Напишите функцию, запрашивающую три угла поворота. Функция
должна выводить матрицу SO(3) для данных углов
5. Проверьте графически функции написанные в упражнении 3 и 4.
Пример кода для построения графиков приведён в примечании
6. Напишите функцию, запрашивающую вектор из 3 элементов и
возвращающую соответствующую кососимметричную матрицу
7. Напишите функцию, запрашивающую единичную ось и угол
поворота, и вычисляющую матрицу вращения с помощью матричной
экспоненты
8. Напишите функцию, вычисляющую матричный логарифм для
заданной матрицы вращения
9. Напишите
функцию,
строящую
однородную
матрицу
преобразования при заданном векторе перемещения и углах поворота
10. Напишите
функцию,
представление
которая
возвращает
нормализованное
винтовой оси винта, описанное единичным
вектором ŝ в направлении винтовой оси, расположенное в точке q, с
шагом h.
11. Напишите программу, которая позволяет пользователю задать
начальную конфигурацию твердого тела T, винтовую ось, заданную
q, sˆ, h
в фиксированной системе отсчета s , и общее расстояние,
пройденное вдоль винтовой оси,  . Программа должна вычислить

конечную конфигурацию T1 = e  T , достигнутую, когда твердое тело
расстояние  , а также промежуточные
проходит по винту
конфигурации при  4 ,  2 и 3 4 . При начальной, промежуточных
и конечной конфигурациях программа должна построить оси
b
твердого тела. Протестируйте программу при q = ( 0,2,0 ) , sˆ = ( 0,0,1) ,
h = 2,  =  и
1
0
T01 = 
0

0
0
1
0
0
0
0
1
0
2
0 
0

1
Примечание:
#График для SE(2)
# Определение переменных
import numpy as np
length = 1
T = np.eye(3)
o = T @ np.array([0, 0, 1])
x = T @ np.array([length, 0, 1])
y = T @ np.array([0, length, 1])
#Построение графика системы отсчета
import matplotlib.pyplot as plt
from matplotlib.axes import Axes
ax = plt.axes()
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.plot([o[0], x[0]], [o[1], x[1]], color="red", linewidth=3)
ax.plot([o[0], y[0]], [o[1], y[1]], color="lime", linewidth=3)
2
#График для SE(3)
# Определение переменных
import numpy as np
length = 0.5
T = np.eye(4)
o
x
y
z
=
=
=
=
T
T
T
T
@
@
@
@
np.array([0, 0, 0, 1])
np.array([length, 0, 0, 1])
np.array([0, length, 0, 1])
np.array([0, 0, length, 1])
#Построение графика системы отсчета
import matplotlib.pyplot as plt
from matplotlib.axes import Axes
ax = plt.axes(projection='3d')
ax.set_xlabel('x', fontsize=14)
ax.set_ylabel('y', fontsize=14)
ax.set_zlabel('z', fontsize=14)
ax.view_init(elev=30, azim=45, roll=0)
ax.axes.set_xlim3d(left=o[0]-length+0.1, right=o[0]+length+0.1)
ax.axes.set_ylim3d(bottom=o[1]-length+0.1, top=o[1]+length+0.1)
ax.axes.set_zlim3d(bottom=o[2]-length+0.1, top=o[1]+length+0.1)
ax.plot(
[o[0], x[0]],
[o[1], x[1]],
[o[2], x[2]],
color='red',
linewidth=3,
)
ax.plot(
[o[0], y[0]],
[o[1], y[1]],
[o[2], y[2]],
color='lime',
linewidth=3,
)
ax.plot(
[o[0], z[0]],
[o[1], z[1]],
[o[2], z[2]],
color='blue',
linewidth=3,
)
3
Download