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

Lines and shapes drawn at incorrect angles

我有一个 c# 程序,我需要在 canvas 上绘制一些简单的 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),我指定的值似乎不是它的绘制方式,我似乎有以下内容;

正如我预期的那样,顶部为 0,右侧为 90,底部为 180,等等。

因此,要获得笔直向下绘制的形状 canvas,我必须指定 90 度,而我希望指定 180 度。

我是不是做错了什么?还是只是不了解?

其实0应该在右边。您将 x 坐标乘以 -1,因此您将它向左移动。
请记住这 2 条规则:
- 角度的余弦为单位圆的x坐标。
- 角度的正弦为单位圆的y坐标。
由于cos(0) = 1sin(0) = 0,所以角度0对应的坐标是(1, 0)。

90 是在顶部还是底部取决于 canvas。
一些 applications/frameworks 认为 y 坐标 0 位于 canvas 的顶部。也就是说你绕着圆圈顺时针转,90会在最下面。
如果 y 坐标 0 在 canvas 的底部,则逆时针旋转,90 将在顶部。

您应该将 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);
}