我的應用程序允許基於鼠標位置圍繞中心旋轉點。我基本上旋轉點周圍像這樣的另一點:該問題的幫助
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....
我覺得存儲原件似乎凌亂和使用額外的內存。有沒有辦法,知道前一個旋轉角度和當前的旋轉角度,我可以避免將變換始終應用於原始點,並且僅僅基於我正在修改的點?
*中心將永遠不會改變,直到鼠標擡起所以那不是一個問題
感謝
每當我看到一個問題,標記C和C++我的頭想要爆炸 – James 2010-08-17 15:35:47
將頭[[explode()'](http://php.net/manual/en/function.explode.php)如果它被標記爲[c,C++和php](http://stackoverflow.com/questions/tagged/c%20c%2b%2b%20php)? :p – kennytm 2010-08-17 15:38:18
此外,這似乎是一個基於數學的問題,即可能在math.stackexchange上找到更好的答案。 – James 2010-08-17 15:38:49