Рассмотрите:
switch(val)
{
case VAL:
int newVal = 42;
default:
int newVal = 23;
}
В отсутствие операторов завершения, иногда newVal объявляется дважды, и Вы не знаете, делает ли он до времени выполнения. Мое предположение - то, что ограничение из-за этого вида беспорядка. Каков объем newVal был бы? Соглашение продиктовало бы, что будет весь блок переключателя (между фигурными скобками).
я не программист на C++, но в C:
switch(val) {
int x;
case VAL:
x=1;
}
Хорошо работает. Объявление переменной в блоке переключателя прекрасно. При объявлении после того, как защита случая не.
Quaternion q;
vector a = crossproduct(v1, v2);
q.xyz = a;
q.w = sqrt((v1.Length ^ 2) * (v2.Length ^ 2)) + dotproduct(v1, v2);
Не забудьте нормализовать q.
Ричард прав насчет того, что не существует уникального поворота, но приведенное выше должно дать «кратчайшую дугу», что, вероятно, вам и нужно.
Проблема, как указано, четко не определена: для данной пары векторов не существует уникального поворота. Рассмотрим, например, случай, когда u = <1, 0, 0> и v = <0, 1, 0> . Один поворот от u к v будет вращением pi / 2 вокруг оси z. Другой поворот от u к v будет вращением на pi вокруг вектора <1, 1, 0> .