0

我正在 iPhone 应用程序中创建一个界面控件,其中视图位于弧形中,对应于 X 触摸位置。我需要编写一个函数,给定一个 X 值,返回对应于下图中红线的 Y 值: 在此处输入图像描述

我将定义点 A、B 和半径 r 来控制曲线的量。A 点始终位于 12 点钟方向(Y 值大于 B 点)。我的数学(尤其是圆圈)有点生疏……我需要什么公式来编写这个函数?伴随任何公式的示例会有所帮助。谢谢!

编辑:函数应该返回 ABS(Y)

4

3 回答 3

3

假设圆的中心是(0,0)。(写一个翻译函数到iphone屏幕坐标应该很简单)

圆的公式是 x^2 + y^2 = r^2

if( x < -(B.x) ) { return minY }//  B.x is the x coord of b.
if( x > B.x ) { return minY }
else {
   return sqrt( r^2 - x^2)
}
于 2012-04-06T14:45:42.713 回答
2

您可以使用勾股定理找到 Y 值。X 2 + Y 2 = r 2

重新排列,我们得到 Y 2 = r 2 - X 2。取两边的平方根,我们得到 Y = sqrt(r 2 - x 2 )。因为我们知道我们关心的 Y 值是正的,所以我们不需要注意我们在取平方根时通常会有的 +/-。

这一切都假设圆的中心在(0,0)。如果不是,则需要应用偏移量。

从那里开始,这只是一个限制值的问题——即,如果你得到的 Y 值小于你的最小 Y 值,那么你将它设置为最小值。

于 2012-04-06T14:45:38.840 回答
0

圆的方程是 (xa)^2 + (yb)^2 = r^2,其中 (a,b) 是圆心的坐标,r 是半径。假设中心位于 (0,0) 且半径为 1,则方程简化为 x^2 + y^2 = 1。要求解 y,方程变为

y^2 = 1 - x^2

或者

y = ± SQRT(1-x^2) for {-1 <= x <= 1}

因此,如果您的 x 值为 0.5,请将其插入,然后得到

y = ± SQRT(1 - 0.5^2)
y = ± SQRT(1 - 0.25)
y = ± SQRT(0.75)
y = ± 0.866

您只需要正值,因此您的坐标将为 (0.5, 0.866)。

于 2012-04-06T14:54:54.100 回答