Нахождение кватерниона, представляющего вращение от одного вектора до другого

Рассмотрите:

switch(val)
{
case VAL:
   int newVal = 42;
default:
   int newVal = 23;
}

В отсутствие операторов завершения, иногда newVal объявляется дважды, и Вы не знаете, делает ли он до времени выполнения. Мое предположение - то, что ограничение из-за этого вида беспорядка. Каков объем newVal был бы? Соглашение продиктовало бы, что будет весь блок переключателя (между фигурными скобками).

я не программист на C++, но в C:

switch(val) {
    int x;
    case VAL:
        x=1;
}

Хорошо работает. Объявление переменной в блоке переключателя прекрасно. При объявлении после того, как защита случая не.

99
задан sdfqwerqaz1 23 July 2009 в 13:45
поделиться

2 ответа

Quaternion q;
vector a = crossproduct(v1, v2);
q.xyz = a;
q.w = sqrt((v1.Length ^ 2) * (v2.Length ^ 2)) + dotproduct(v1, v2);

Не забудьте нормализовать q.

Ричард прав насчет того, что не существует уникального поворота, но приведенное выше должно дать «кратчайшую дугу», что, вероятно, вам и нужно.

111
ответ дан 24 November 2019 в 05:03
поделиться

Проблема, как указано, четко не определена: для данной пары векторов не существует уникального поворота. Рассмотрим, например, случай, когда u = <1, 0, 0> и v = <0, 1, 0> . Один поворот от u к v будет вращением pi / 2 вокруг оси z. Другой поворот от u к v будет вращением на pi вокруг вектора <1, 1, 0> .

7
ответ дан 24 November 2019 в 05:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: