以不正确的角度绘制线条和形状
问题描述:
我有一个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),我指定的值似乎不是如何绘制的,我似乎有以下几点;
在哪里,因为我在上面,90在右边,180在底部等预期0
因此,要获得一个形状绘制直降画布我必须指定90度,正如我期望指定的180.
我做错了什么?还是仅仅是缺乏理解?
答
你应该改变你的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应该在右边。你将x坐标乘以-1,所以你将它移动到左边。
只记得这两条规则:
- 角度的余弦是单位圆的x坐标。
- 角度的正弦值是单位圆的y坐标。
由于cos(0) = 1
和sin(0) = 0
,对应于角度0的坐标是(1,0)。
90是在顶部还是在底部取决于画布。
一些应用程序/框架认为y坐标0位于画布的顶部。这意味着你绕着圆圈顺时针旋转,而90将在最下面。
如果y坐标0位于画布的底部,则逆时针旋转90°将位于顶部。
+0
很好的解释,谢谢。我认为-1的倍数是从底部向上画布转换成顶部向下画布(在C#中使用)。 –
好的代码,谢谢。但变量“dec”是不需要的! –
是的,我用它来测试。 – Sakura