我正在编写一些类似行星围绕太阳运动的东西,为了移动行星,我使用了一个函数
CGPointMake(object.center.x + 1, sqrt(75*75*150*150 - 75*75*(object.center.x - 300)*(object.center.x - 300))/150 + 150)
使用椭圆方程,其中a = 150,B = 75,p = 300,q = 150,但当物体接近x = 450左右时,它的速度上升,我猜这是因为pitagora,因为它经过的路径是c = sqrt((x-x 0)^2*(y-y 0)^2)
我注意到我的c总是在0.5左右,但是当它到达x域的末端时,它上升到0.8,所以我需要一个程序或数学解决方案来使对象以相同的速度绕椭圆曲线移动
谢谢你!
3条答案
按热度按时间k4emjkb11#
如果你想要真实的
然后行星更接近主焦点(恒星系统的质量中心…非常接近星星)移动得更快,所以在这里使用Kepler's equation:C++ implementation of mine.别忘了检查出所有的子链接,在这个答案中,你可以找到你需要的一切.
如果你想要匀速
然后利用参数椭圆方程
其中
a
是Angular<0,2.0*PI>
,(x0,y0)
是椭圆中心,(rx,ry)
是椭圆半轴(半径)。如果
a
以恒定速度递增,则面积增加是恒定的,因此a
是平均圆周角,而不是椭圆上的可视Angular !!!有关更多信息,请查看此处:[edit 1]正如MartinR指出的速度不是恒定的
这是他速度公式的近似值椭圆轴对齐,由
x0,y0,rx,ry
(rx>=ry)
周长近似值l
定义:如果你想在周长上有
n
个大小相等的台阶块,那么初始计算:
第一个缓慢的暴力攻击(黑色):
现在近似值(蓝色):
这是干净的椭圆步骤(没有调试绘制)
这里的输出比较蛮力和近似:
[edit 2]精度略有提升
近似半步角导致更接近蛮力攻击的结果
33qvvth12#
嗯...
你可以用SpriteKit很容易地伪造这样的东西。注意:您的整个应用程序不必使用SpriteKit。您可以相当容易地将SKView放入非SpriteKit应用程序中。
不管怎样...
创造你的星球。。
创建椭圆路径...
创建操作...
运行操作...
iq0todco3#
在文章“椭圆的运动学”中,给出了点沿着椭圆的运动的公式:1.制服,2.均匀加速,3.椭圆形(Kepler)。证明了只有当移动3个Kepler定律满足https://www.academia.edu/94295697/Ellipse_kinematics时