Sobes.tech
Junior — Middle
78

¿Cómo realizar una rotación de un conjunto de puntos de coordenadas 3D en 30 grados alrededor de un eje de coordenadas seleccionado?

Respuesta de la IA

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