2014-10-19 231 views
0

我想通過一個角度標準問題來圍繞中心點旋轉一個點。我見過很多關於這個職位,但我不能讓我的執行工作:圍繞另一點旋轉一個點

void Point::Rotate(const Point Pivot, const float Angle) 
    { 
     if (Angle == 0) 
      return; 

     float s = sin(Angle); 
     float c = cos(Angle); 

     x -= Pivot.x; 
     y -= Pivot.y; 

     x = (x * c) - (y * s) + Pivot.x; 
     y = (x * s) + (y * c) + Pivot.y; 
    } 

這是我的代碼,我已經從衆多的來源收集的邏輯,例如herehere

據我所知,它應該工作。然而,當我將它應用於旋轉時,例如,在(0,0)周圍將點(0,100)旋轉90度(Pi/2被賦予該函數),旋轉點顯然在(-100,-100 ); 100px以下應該是。

當試圖畫一個圓(36分) - 它創建了一個模糊的心臟形狀。它看起來像我看到的圖形,我認爲是在極座標系中 - 我是否需要將我的觀點轉換爲笛卡兒或其他?

任何人都可以找出什麼毛病我的代碼?

編輯:對不起,這個函數是一個成員函數的Point類 - xy是成員變量:/

+0

什麼樣的價值'x'在最後一行所使用的? – 2014-10-19 10:46:55

+0

@OliverCharleswoth感謝您指出,編輯 – hnefatl 2014-10-19 10:49:04

+0

我想你已經錯過了我的觀點!最後一行使用「x」值;該值在哪裏計算? – 2014-10-19 10:49:52

回答

2

就快,但你在接下來的-TO-修改x最後一行,這意味着輸入到y計算中的座標值不正確!

相反,使用臨時變量的新xy然後添加Pivot座標上算賬:

double nx = (x * c) - (y * s); 
double ny = (x * s) + (y * c); 

x = nx + Pivot.x; 
y = ny + Pivot.y; 
+0

Argh。謝謝,這是我的一個非常愚蠢的錯誤:/ – hnefatl 2014-10-19 10:54:46