Sobes.tech
Junior — Middle

Como realizar uma rotação de um conjunto de pontos de coordenadas 3D em 30 graus em torno de um eixo de coordenadas selecionado?

sobes.tech IA

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