Sobes.tech
Back to questions
Junior — Middle
48

Каким образом осуществить вращение набора 3D-координатных точек на 30 градусов вокруг выбранной оси координат?

Answer from AI

sobes.tech AI

Для вращения набора 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 — массив с координатами точек (каждая строка — точка), функция возвращает новые координаты после поворота.