Junior — Middle
79
Comment effectuer une rotation d'un ensemble de points de coordonnées 3D de 30 degrés autour d'un axe de coordonnées choisi?
Réponse de l'IA
sobes.tech IA
Для вращения набора 3D-точек на 30 градусов вокруг выбранной оси (например, оси X, Y или Z) можно использовать матрицы поворота. В Python удобно применять библиотеку NumPy для работы с матрицами и векторами.
Пример вращения вокруг оси Z на 30 градусов:
import numpy as np
def rotate_points(points, angle_deg, axis='z'):
angle_rad = np.radians(angle_deg)
if axis == 'x':
R = np.array([
[1, 0, 0],
[0, np.cos(angle_rad), -np.sin(angle_rad)],
[0, np.sin(angle_rad), np.cos(angle_rad)]
])
elif axis == 'y':
R = np.array([
[np.cos(angle_rad), 0, np.sin(angle_rad)],
[0, 1, 0],
[-np.sin(angle_rad), 0, np.cos(angle_rad)]
])
elif axis == 'z':
R = np.array([
[np.cos(angle_rad), -np.sin(angle_rad), 0],
[np.sin(angle_rad), np.cos(angle_rad), 0],
[0, 0, 1]
])
else:
raise ValueError("Axis must be 'x', 'y' or 'z'")
rotated_points = points @ R.T # умножение каждой точки на матрицу поворота
return rotated_points
# Пример использования:
points = np.array([
[1, 0, 0],
[0, 1, 0],
[0, 0, 1]
])
rotated = rotate_points(points, 30, axis='z')
print(rotated)
Здесь points — массив с координатами точек (каждая строка — точка), функция возвращает новые координаты после поворота.