以不正确的角度绘制的线条和形状

时间:2016-03-02 09:00:12

标签: c# geometry drawing2d

我有一个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

我期待在顶部为0,在右边为90,在底部为180等。

因此,为了让形状在画布上直接绘制,我必须指定90度,我希望指定180度。

我做错了吗?或者只是缺乏理解?

2 个答案:

答案 0 :(得分:1)

实际上,0应该在右边。您将x坐标乘以-1,因此您将其向左移动 记住这两条规则:
- 角度的余弦是单位圆的x坐标 - 角度的正弦值是单位圆的y坐标 自cos(0) = 1sin(0) = 0起,与角度0对应的坐标为(1,0)。

90是在顶部还是在底部取决于画布 一些应用程序/框架认为y坐标0位于画布的顶部。这意味着你顺时针绕圆圈走,90就在底部 如果y坐标0位于画布的底部,则逆时针旋转,90将位于顶部。

答案 1 :(得分: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);
}