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

x40*_*000 40 c# math geometry angle

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

我目前的代码:

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 ) );
Run Code Online (Sandbox Code Playgroud)

一般来说,这似乎相当合理,但我在各个点都遇到问题,最明显的是当角度对应于负x轴和y轴的点时.显然我做错了什么 - 想一想是什么?

更新:这是我的错误,这段代码工作正常 - 少数不起作用的异常值实际上是由于如何计算1.5PI的角度的错误.我以为我已经检查得那么好,但显然没有.感谢大家的时间,希望上面的工作代码对其他人有用.

Mar*_*ner 34

你忘了添加中心点:

result.Y = (int)Math.Round( centerPoint.Y + distance * Math.Sin( angle ) );
result.X = (int)Math.Round( centerPoint.X + distance * Math.Cos( angle ) );
Run Code Online (Sandbox Code Playgroud)

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


Joh*_*sch 6

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

double angle = (Math.PI / 3); // 60 degrees...
Run Code Online (Sandbox Code Playgroud)

功能本身工作正常.如果你的距离足够小,舍入只会影响你的答案.除此之外,答案应该很好.

如果这是你担心的四舍五入,请记住,默认情况下,.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);
Run Code Online (Sandbox Code Playgroud)

代替.

另外,在你想要距离X和角度Y的问题中 ......我假设你没有把它与这一点联系起来(X,Y),因为那是完全不同的.

距离公式为:

double distance = Math.Sqrt((centerPoint.X + result.X)^2 + (centerPoint.Y + result.Y)^2);
Run Code Online (Sandbox Code Playgroud)