我有这个函数,它返回x
和y
位置只是加起来的度数,它使物体以圆周运动的方式移动,就像卫星绕行星一样。
在我的情况下,它像椭圆一样移动,因为我将+30
添加到dist。
-(CGPoint)circularMovement:(float)degrees moonDistance:(CGFloat)dist
{
if(degrees >=360)degrees = 0;
float x = _moon.position.x + (dist+30 + _moon.size.height/2) *cos(degrees);
float y = _moon.position.y + (dist + _moon.size.height/2) *sin(degrees);
CGPoint position= CGPointMake(x, y);
return position;
}
我想要的是反转这个函数,给出一个对象的x
和y
位置并返回dist值。
这可能吗?
如果是这样,我将如何实现它?
答案 0 :(得分:1)
如果你有一个原点和一个目标,那么具有坐标(x1,y1)的原点和目标的坐标(x2,y2)就可以使用Pythagorean theorem找到它们之间的距离。
点之间的距离是x2和x1之差的平方根加上y2和y1之间的差值。
在大多数语言中,这看起来像这样:
x = x2 - x1; y = y2 - y1;
距离= Math.SquareRoot(x * x + y * y);
数学是你语言的数学库。
答案 1 :(得分:1)
float x = _moon.position.x + (dist+30 + _moon.size.height/2) *cos(degrees);
float y = _moon.position.y + (dist + _moon.size.height/2) *sin(degrees);
是您最初计算值的方式,因此反公式为:
dist =((y - _moon.position.y)/(sin(degrees))) - _moon.size.height / 2
你也可以根据x计算它,但没有意义,它基于y更简单。