如何根据给定的圆心、角度和半径计算一个点?

20

在这个SO问题中,有人询问如何从三个点计算角度。我需要做相反的事情。

我想画一个时钟,我有小的刻度图像。一个艺术家制作了60个图像,每个图像都有独特而准确的阴影。因此,有60个不同的图像,大小为10x10点,并已在该正方形的中心正确旋转。

因此,每6度必须放置一个刻度图像。我只需要根据中心点、半径和角度计算x/y坐标。

所以我有:

  • 中心点
  • 半径
  • 角度

有没有一种简单的方法来计算x/y坐标?也许cocoa-touch已经有一个有用的函数或方法可以实现这个?

3个回答

27

设角度为a,圆心坐标为(x,y),半径为r,那么您的点将位于

(x + r*cos(a), y + r*sin(a))

5
正弦和余弦在这里被颠倒了。 - Joel Teply

20

在数学中,从极坐标系计算出直角坐标系的方法是:

x = r * cos(A) + x0;
y = r * sin(A) + y0;

在这里,(x0, y0)是圆的中心,r是半径,A是角度。

但是,这假设了数学坐标系惯例,即向右移动时x增加,向上移动时y增加。这是Mac OS X Cocoa视图的默认值,但我不知道iPhone是否相同。

此外,角度从3点钟开始,逆时针旋转,即3点钟为0度,12点钟为90度,9点钟为180度,6点钟为270度。

另外,C正弦和余弦函数使用弧度。


我刚意识到unbeli的答案已经应用了修正,使角度从顶部开始并顺时针旋转,这是你在钟表上所期望的自然方式。 - JeremyP
+1. 我无法让unbeli的解决方案起作用,但是您的确可以(使用JavaScript)。以下是绘制HTML5画布中心指定角度的线条的代码片段。请注意解决从3点钟开始的方法:x0 = ctx.canvas.width / 2; y0 = ctx.canvas.height / 2;ctx.lineTo( (x0 + r * Math.cos(toRad(angle-90))), (y0 + r * Math.sin(toRad(angle-90))) ); - Gojira

1

你的图像(中心)应该放置在点(X,Y)处,其中(x,y)是中心点的坐标,r是半径

X = x + (r/2)*cos(angle);
Y = y + (r/2)*sin(angle); 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接