我正在iPhone应用程序中创建一个界面控件,其中视图位于弧形中,对应于X触摸位置。我需要编写一个函数,给定一个X值,返回与下图中红线对应的Y值:
我将定义点A,B和半径r来控制曲线的数量。 A点始终位于12点(Y值大于B点)。我的数学(特别是圆圈)有点生锈...我需要用什么公式来编写这个函数?伴随任何公式的示例将是有帮助的。谢谢!
编辑:函数应返回ABS(Y)
答案 0 :(得分: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)
}
答案 1 :(得分: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值,则将其设置为最小值。
答案 2 :(得分:0)
圆的等式是(x-a)^ 2 +(y-b)^ 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)。