当前位置:  开发笔记 > 编程语言 > 正文

从C#中的角度计算圆周长上的点?

如何解决《从C#中的角度计算圆周长上的点?》经验,为你挑选了2个好方法。

我想这是一个简单的问题,但是我现在的代码得到了一些奇怪的结果,我没有数学背景来完全理解为什么.我的目标很简单,正如标题中所述:我只想找到距离中心点一定距离和角度的点.

我目前的代码:

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的角度的错误.我以为我已经检查得那么好,但显然没有.感谢大家的时间,希望上面的工作代码对其他人有用.



1> MartinStettn..:

你忘了添加中心点:

result.Y = (int)Math.Round( centerPoint.Y + distance * Math.Sin( angle ) );
result.X = (int)Math.Round( centerPoint.X + distance * Math.Cos( angle ) );

其余的应该没问题......(你得到了什么奇怪的结果?你能给出一个确切的输入吗?)



2> John Rasch..:

首先,因为你是弧度,所以定义你的角度可能是有益的:

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);

推荐阅读
无名有名我无名_593
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有