2016-03-02 103 views
1

我有一個c#程序,我需要在畫布上繪製一些簡單的2D對象。以不正確的角度繪製線條和形狀

其中之一涉及繪製矩形和線我知道起點,長度和我必須計算結束位置。所以我有以下代碼;

private void CalculateEndPoint() 
{ 
      double angle = Helper.deg2rad((double)this.StartAngle); 
      int x = this.StartPoint.X + (int)(Math.Cos(angle) * this.Length * -1); 

      int y = this.StartPoint.Y + (int)(Math.Sin(angle) * this.Length); 
      this.EndPoint = new Point(x, y); 
} 

現在,這似乎工作確定計算的終點。我遇到的問題是角度(this.StartAngle),我指定的值似乎不是如何繪製的,我似乎有以下幾點;

Circle degrees

在哪裏,因爲我在上面,90在右邊,180在底部等預期0

因此,要獲得一個形狀繪製直降畫布我必須指定90度,正如我期望指定的180.

我做錯了什麼?還是僅僅是缺乏理解?

回答

1

你應該改變你的CalculateEndPoint功能有:

private static void CalculateEndPoint(double dec) 
{ 
    double angle = (Math.PI/180) * (this.StartAngle + 90); // add PI/2 
    int x = StartPoint.X + (int)(Math.Cos(angle) * Length * -1); 

    double angle2 = (Math.PI/180) * (this.StartAngle - 90); // minus PI/2 
    int y = StartPoint.Y + (int)(Math.Sin(angle2) * Length); 
    EndPoint = new Point(x, y); 
} 
+0

好的代碼,謝謝。但變量「dec」是不需要的! –

+1

是的,我用它來測試。 – Sakura

1

實際上,0應該在右邊。你將x座標乘以-1,所以你將它移動到左邊。
只記得這兩條規則:
- 角度的餘弦是單位圓的x座標。
- 角度的正弦值是單位圓的y座標。
由於cos(0) = 1sin(0) = 0,對應於角度0的座標是(1,0)。

90是在頂部還是在底部取決於畫布。
一些應用程序/框架認爲y座標0位於畫布的頂部。這意味着你繞着圓圈順時針旋轉,而90將在最下面。
如果y座標0位於畫布的底部,則逆時針旋轉90°將位於頂部。

+0

很好的解釋,謝謝。我認爲-1的倍數是從底部向上畫布轉換成頂部向下畫布(在C#中使用)。 –