В 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?
Я не хочу применять матрицы преобразования к точкам после поворота вокруг оси - то, что я ищу, является «эллиптической» матрицей вращения, если кто-нибудь знает о такой вещи!
Возможно, вам лучше спросить конкретный математический форум. – Noldorin
Во-первых, не используйте a и b для эллипса, потому что a и b уже являются переменными вашего кода; Во-вторых, вам нужно указать ориентацию осей многоточия; С помощью этого вы можете сделать масштабирование в зависимости от theta, чтобы преобразовать ваш круг в путь эллипса. –