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

Я пытаюсь повернуть объект только вокруг одной оси (любой произвольный единичный вектор, не обязательно x, y или z), основываясь на компоненте вращения кватерниона вдоль той же оси указанного вращения кватерниона.

public void Rotate(Quaternion rotation, Vector3 axis, Vector3 pointToRotateAround)
{
     float angle = ?
     gameObject.transform.RotateAround(pointToRotateAround, axis, angle);
}

Я не знаю, как получить угол поворота моего кватерниона, который находится только вдоль указанной оси. Я мог бы сделать это, когда ось у, например:

public void Rotate(Quaternion rotation, Vector3 pointToRotateAround)
{
     gameObject.transform.RotateAround(pointToRotateAround, Vector3.up, rotation.eulerAngles.y);
}

Я хочу повторить результаты выше, но для любой данной оси.

Я копался в Google, пытаясь найти ответ на этот вопрос, но я не нашел решения. Любая помощь приветствуется.

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Я интерпретирую ваш вопрос так: если у вас есть набор вращающихся точек, под каким углом они будут двигаться вокруг какой-то другой оси.

Единственная проблема, связанная с этим, заключается в том, что угол от другой оси фактически зависит от того, на какую точку вы смотрите.

Rotation

Однако вы можете попытаться представить вращение в виде угла оси (ω, θ), а затем взять скалярное произведение с вашей осью v, чтобы получить новый угол θ, масштабированный по w.v. Возможно, это не то, что вам нужно, но если вы добавите детали с более подробной информацией о том, чего вы пытаетесь достичь, мы сможем помочь вам лучше.

0 голосов
/ 19 апреля 2019

Вот код, который я хотел:

public void Rotate(Quaternion rotation, Vector3 axis, Vector3 pointToRotateAround)
{
     float angle;
     Vector3 rotAxis;

     rotation.ToAngleAxis(out angle, out rotAxis);

     float angleAroundAxis = Vector3.Dot(rotAxis, axis);

     gameObject.transform.RotateAround(pointToRotateAround, axis, angleAroundAxis);
}
...