Как случайным образом нарисовать кватернионы в определенном диапазоне углов Эйлера для вращения? - PullRequest
0 голосов
/ 27 октября 2018

Я довольно новичок в Quaternions, поэтому, пожалуйста, потерпите меня.Я хочу нарисовать случайные кватернионные образцы так, чтобы их эквивалент угла Эйлера находился в пределах [-30, +30] градусов по каждой оси.В настоящее время я знаю, как сэмплировать кватернионы из полного диапазона ([-180, +180]), используя приведенный ниже код, но я не знаю, как изменить код, чтобы я мог получать сэмплы в диапазоне [-30, +30].Кто-нибудь может мне помочь с этим?

Я не уверен, что это полезно для ответа на этот вопрос, но вот часть информации: я в конечном итоге хочу преобразовать выбранные кватернионные углы в углы Эйлера и применить вращение Эйлера в некоторых трехмерных формах.Порядок вращения в программном обеспечении, которое я использую для этого, составляет XYZ, что означает, что сначала он поворачивает трехмерную фигуру вдоль оси X, затем по оси Y и затем по оси Z.

import numpy as np
def sample_Quaternion():
    r = np.random.uniform(0, 1 - 0.001, 3)
    while np.linalg.norm(r) > 1:
        r = np.random.uniform(0, 1 - 0.001, 3) # Just to keep the L2 norm within [0, 1.0)
    w = [np.sqrt(1 - (r[0]*r[0] + r[1]*r[1] + r[2]*r[2]))]
    r = np.concatenate(r, w) # the output of this would represent (x, y, z, w)
    return r
...