我想这是一个简单的问题,但是我现在的代码得到了一些奇怪的结果,我没有数学背景来完全理解为什么.我的目标很简单,正如标题中所述:我只想找到距离中心点一定距离和角度的点.
我目前的代码:
Point centerPoint = new Point ( 0, 0 ); Point result = new Point ( 0, 0 ); double angle = 0.5; //between 0 and 2 * PI, angle is in radians int distance = 1000; result.Y = centerPoint.Y + (int)Math.Round( distance * Math.Sin( angle ) ); result.X = centerPoint.X + (int)Math.Round( distance * Math.Cos( angle ) );
一般来说,这似乎相当合理,但我在各个点都遇到问题,最明显的是当角度对应于负x轴和y轴的点时.显然我做错了什么 - 想一想是什么?
更新:这是我的错误,这段代码工作正常 - 少数不起作用的异常值实际上是由于如何计算1.5PI的角度的错误.我以为我已经检查得那么好,但显然没有.感谢大家的时间,希望上面的工作代码对其他人有用.
你忘了添加中心点:
result.Y = (int)Math.Round( centerPoint.Y + distance * Math.Sin( angle ) ); result.X = (int)Math.Round( centerPoint.X + distance * Math.Cos( angle ) );
其余的应该没问题......(你得到了什么奇怪的结果?你能给出一个确切的输入吗?)
首先,因为你是弧度,所以定义你的角度可能是有益的:
double angle = (Math.PI / 3); // 60 degrees...
功能本身工作正常.如果你的距离足够小,舍入只会影响你的答案.除此之外,答案应该很好.
如果这是你担心的四舍五入,请记住,默认情况下,.NET会对银行家进行舍入,您可能需要:
result.X = (int)Math.Round(centerPoint.X + distance * Math.Cos(angle), MidpointRounding.AwayFromZero); result.Y = (int)Math.Round(centerPoint.Y + distance * Math.Sin(angle), MidpointRounding.AwayFromZero);
代替.
另外,在你想要距离X和角度Y的问题中 ......我假设你没有把它与这一点联系起来(X,Y)
,因为那是完全不同的.
距离公式为:
double distance = Math.Sqrt((centerPoint.X + result.X)^2 + (centerPoint.Y + result.Y)^2);