寻找圆周上像素坐标的算法

8

如果我知道圆心的像素坐标、圆的半径和垂直角度,如何找出圆周上某个角度的像素值?基本上,我正在尝试在不同时间(1点钟,2点钟等)绘制时钟的指针。

5个回答

19

假设小时的浮点数为 h(例如h=2.25代表02:15等),范围在0到12之间。坐标为(cX,cY)的点是时钟的中心,hLengthmLength分别表示时针和分针的长度。

// Hour hand
hAngle = 2.0*Pi*h/12.0; // 0..12 mapped to 0..2*Pi
hX = cX + hLength * sin(hAngle);
hY = cY - hLength * cos(hAngle);

// Min hand
mAngle = 2.0*Pi*h; // 0..1 mapped to 0..2*Pi, etc.
mX = cX + mLength * sin(mAngle);
mY = cY - mLength * cos(mAngle);

9

圆心坐标为 (X0, Y0),半径为 R,与x轴夹角为theta:

X1 = (R * cos theta) + X0

并且

Y1 = (R * sin theta) + Y0

这个不应该被投得那么高。他似乎不知道theta的价值。Eric Bainville的答案更完整。 - jmucchiello
@jmucchiello - 不确定我是否理解您的意思...我们被要求提供一个算法,我给出了带有形式参数的函数描述。在这个阶段,没有人知道theta的“值”!如果您的意思是我没有计算时钟指针运动的缩放因子和每个小时刻度的弧度角,那么您绝对是正确的。我有自己的代码需要编写! - avstrallen
1
是的,我想我在一个问题中问了两个问题。你的答案对第一个部分来说是完美的。谢谢。 - Surya

4

如果 (x1,y1) 是圆周上的一个点,(x,y) 是圆心,则 x1 = x + r * cos(angle),且 y1 = y + r * sin(angle)

。这里的 r 表示半径,angle 表示角度。

请注意,这里假定的是标准的“数学”坐标系统,其中 Y 轴向上增加。在典型的 2D 计算机图形中,它被反转了(为了使 Y 随像素地址增长而增长)。 - unwind
这仅适用于以原点为中心的圆。 - ralphtheninja
只需添加中心点的坐标。 - Svante

0

如果中心点位于x0,y0处,而0,0位于左下角,则1点钟位置为x0 + rsin(2π/3),y0+rcos(2π/3)。


-1
在编程中,可以使用sin和cos计算y坐标和x坐标(同时乘以手的长度),然后从中心绘制线条到计算出的坐标。有关sin和cos如何“工作”的详细信息,请参考Wikipedia

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