2016-03-02 55 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#中使用)。 –

相关问题