我正在 iPhone 应用程序中创建一个界面控件,其中视图位于弧形中,对应于 X 触摸位置。我需要编写一个函数,给定一个 X 值,返回对应于下图中红线的 Y 值:
我将定义点 A、B 和半径 r 来控制曲线的量。A 点始终位于 12 点钟方向(Y 值大于 B 点)。我的数学(尤其是圆圈)有点生疏……我需要什么公式来编写这个函数?伴随任何公式的示例会有所帮助。谢谢!
编辑:函数应该返回 ABS(Y)
我正在 iPhone 应用程序中创建一个界面控件,其中视图位于弧形中,对应于 X 触摸位置。我需要编写一个函数,给定一个 X 值,返回对应于下图中红线的 Y 值:
我将定义点 A、B 和半径 r 来控制曲线的量。A 点始终位于 12 点钟方向(Y 值大于 B 点)。我的数学(尤其是圆圈)有点生疏……我需要什么公式来编写这个函数?伴随任何公式的示例会有所帮助。谢谢!
编辑:函数应该返回 ABS(Y)
假设圆的中心是(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)
}
您可以使用勾股定理找到 Y 值。X 2 + Y 2 = r 2。
重新排列,我们得到 Y 2 = r 2 - X 2。取两边的平方根,我们得到 Y = sqrt(r 2 - x 2 )。因为我们知道我们关心的 Y 值是正的,所以我们不需要注意我们在取平方根时通常会有的 +/-。
这一切都假设圆的中心在(0,0)。如果不是,则需要应用偏移量。
从那里开始,这只是一个限制值的问题——即,如果你得到的 Y 值小于你的最小 Y 值,那么你将它设置为最小值。
圆的方程是 (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)。