Навигация по небу: преобразование тангажа и рыскания в векторы

Когда дело касается авиации, понимание принципов тангажа и рыскания имеет решающее значение. Эти термины описывают вращательные движения летательного аппарата вокруг его вертикальной и горизонтальной осей соответственно. Хотя тангаж и рыскание обычно используются в авиации, их также можно применять и в других областях, таких как робототехника, виртуальная реальность и разработка игр. В этой статье мы углубимся в тему преобразования тангажа и рыскания в векторы, изучим различные методы и попутно предоставим примеры кода.

Метод 1: тригонометрия с синусом и косинусом
Одним из распространенных методов преобразования тангажа и отклонения в векторы является использование тригонометрических функций, таких как синус и косинус. Допустим, у нас есть угол тангажа (θ) и угол рыскания (ψ). Затем мы можем вычислить компоненты X, Y и Z результирующего вектора следующим образом:

import math
def pitch_yaw_to_vector(pitch, yaw):
    x = math.cos(math.radians(pitch)) * math.cos(math.radians(yaw))
    y = math.sin(math.radians(pitch))
    z = math.cos(math.radians(pitch)) * math.sin(math.radians(yaw))
    return x, y, z
# Example usage
pitch = 30  # degrees
yaw = 45  # degrees
result = pitch_yaw_to_vector(pitch, yaw)
print(f"Vector: ({result[0]}, {result[1]}, {result[2]})")

Метод 2: вращение кватернионов
Другой подход предполагает использование вращения кватернионов — математического метода, обычно используемого для трехмерных вращений. Кватернионы предоставляют краткий и эффективный способ представления ориентации в трех измерениях. Вот пример преобразования тангажа и отклонения в кватернион и последующего получения результирующего вектора:

from scipy.spatial.transform import Rotation
def pitch_yaw_to_vector(pitch, yaw):
    # Create a quaternion representing the pitch and yaw rotations
    rotation = Rotation.from_euler('zy', [yaw, pitch], degrees=True)
    # Obtain the resulting vector from the quaternion
    vector = rotation.apply([1, 0, 0])
    return vector
# Example usage
pitch = 30  # degrees
yaw = 45  # degrees
result = pitch_yaw_to_vector(pitch, yaw)
print(f"Vector: ({result[0]}, {result[1]}, {result[2]})")

Метод 3: матрица вращения
Матрицу вращения также можно использовать для преобразования тангажа и рыскания в вектор. Умножив матрицу вращения на исходный вектор, мы можем получить результирующий вектор. Вот пример реализации:

import numpy as np
def pitch_yaw_to_vector(pitch, yaw):
    # Convert pitch and yaw to radians
    pitch_rad = np.radians(pitch)
    yaw_rad = np.radians(yaw)
    # Define the rotation matrix
    rotation_matrix = np.array([[np.cos(yaw_rad), -np.sin(yaw_rad), 0],
                                [np.sin(yaw_rad), np.cos(yaw_rad), 0],
                                [0, 0, 1]])
    # Apply the rotation matrix to the initial vector
    initial_vector = np.array([1, 0, 0])
    result = np.dot(rotation_matrix, initial_vector)
    return result
# Example usage
pitch = 30  # degrees
yaw = 45  # degrees
result = pitch_yaw_to_vector(pitch, yaw)
print(f"Vector: ({result[0]}, {result[1]}, {result[2]})")

В этой статье мы рассмотрели несколько методов преобразования тангажа и отклонения в векторы. Мы рассмотрели тригонометрию с синусом и косинусом, вращением кватернионов и матрицами вращения. Каждый метод предоставляет уникальный способ получения результирующего вектора на основе заданных углов тангажа и рыскания. Понимая эти методы, вы сможете эффективно перемещаться по небу или реализовывать трехмерное вращение в различных приложениях.