2009-07-06 2 views
3

В C++ можно вращать точку вокруг произвольной оси:Эллиптическая матрица вращения?

 
    void radRotateAxis(float a, float b, float c, float theta) 
    { 
    float newX = (
     x*(a*a*(1-cos(theta)) + cos(theta) ) + 
     y*(a*b*(1-cos(theta)) - c*sin(theta)) + 
     z*(a*c*(1-cos(theta)) + b*sin(theta))); 

    float newY = (
     x*(a*b*(1-cos(theta)) + c*sin(theta)) + 
     y*(b*b*(1-cos(theta)) + cos(theta) ) + 
     z*(b*c*(1-cos(theta)) - a*sin(theta)) ); 

    float newZ = (
     x*(a*c*(1-cos(theta)) - b*sin(theta)) + 
     y*(b*c*(1-cos(theta)) + a*sin(theta)) + 
     z*(c*c*(1-cos(theta)) + cos(theta) ) ); 

    x = newX ; 
    y = newY ; 
    z = newZ ; 
    } 

Но, как мы ходим тета 0 - > 2PI это занимает точку вокруг «единичной окружности» вокруг оси вы вращающейся вокруг

Как мы можем сделать это так, как тета 0 - > 2PI Результаты поиска около ellipse ширина, высота b?

Я не хочу применять матрицы преобразования к точкам после поворота вокруг оси - то, что я ищу, является «эллиптической» матрицей вращения, если кто-нибудь знает о такой вещи!

+0

Возможно, вам лучше спросить конкретный математический форум. – Noldorin

+0

Во-первых, не используйте a и b для эллипса, потому что a и b уже являются переменными вашего кода; Во-вторых, вам нужно указать ориентацию осей многоточия; С помощью этого вы можете сделать масштабирование в зависимости от theta, чтобы преобразовать ваш круг в путь эллипса. –

ответ

6

Определите матрицу A, чтобы масштабировать целевой эллипс до подходящей единичной окружности.

Тогда композиция матрицы А, матрицы вращения и обратного к А является вашей эллиптической матрицей вращения.

Смежные вопросы