Я довольно новичок в 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