Мое приложение позволяет вращать точки вокруг центра в зависимости от положения мыши. Я в основном вращаю точки вокруг другой точки, например:
void CGlEngineFunctions::RotateAroundPointRad( const POINTFLOAT ¢er, const POINTFLOAT &in, POINTFLOAT &out, float angle )
{
//x' = cos(theta)*x - sin(theta)*y
//y' = sin(theta)*x + cos(theta)*y
POINTFLOAT subtr;
subtr.x = in.x - center.x;
subtr.y = in.y - center.y;
out.x = cos(angle)*subtr.x - sin(angle)*subtr.y;
out.y = sin(angle)*subtr.x + cos(angle)*subtr.y;
out.x += center.x;
out.y += center.y;
}
где POINTFLOAT просто
struct POINTFLOAT {
float x;
float y;
}
Проблема в том, что точки должны обновляться при перемещении мыши. Я ищу способ сделать это без следующих действий:
Store original points
Rotate Original points
Copy result
Show Result
Rotate Original points
Copy result
Show Result....
Я чувствую, что хранение оригиналов кажется грязным и использует дополнительную память. Есть ли способ, зная предыдущий угол поворота и текущий, который я могу как-то избежать, применяя преобразование к исходным точкам все время и просто опираясь на точки, которые я изменяю?
* центр никогда не изменится, пока мышь не поднимется, так что это не проблема
Спасибо