当前位置: 首页 > 知识库问答 >
问题:

物体间的重力加速度

胡劲
2023-03-14

所以我在做一个程序,在这里你可以有两个对象(圆)。我希望它们像行星一样围绕彼此运行,但只能是二维的。

我知道用牛顿万有引力定律,我可以得到两个物体之间的力。我也知道A=F/m,我的问题是我如何从前面的方程中得到A并把它变成一个向量?

共有1个答案

蓬弘
2023-03-14

您需要使用向量方程:

// init values (per object)
double ax=0.0,ay=0.0,az=0.0; // acceleration [m/s^2]
double vx=0.0,vy=0.0,vz=0.0; // velocity [m/s]
double  x=0.0, y=0.0, z=0.0; // position [m]
double m=1.0;                  // mass [kg] 

// iteration inside some timer (dt [seconds] period) ...   
int i; double a,dx,dy,dz; // first compute acceleration
for (ax=0.0,ay=0.0,az=0.0,i=0;i<obj.num;i++) 
 if (obj[i]!=this) // ignore gravity from itself
  {
  dx=obj[i].x-x;
  dy=obj[i].y-y;
  dz=obj[i].z-z;
  a=sqrt((dx*dx)+(dy*dy)+(dz*dz));     // a=distance to obj[i]
  a=6.67384e-11*(obj[i].m*m)/(a*a*a); // a=acceleration/distance to make dx,dy,dz unit vector 
  ax+=a*dx; // ax,ay,az = actual acceleration vector (integration)
  ay+=a*dy;
  az+=a*dz;
  }
vx+=ax*dt; // update speed via integration of acceleration
vy+=ay*dt;
vz+=az*dt;
 x+=vx*dt; // update position via integration of velocity
 y+=vy*dt;
 z+=vz*dt;

代码取自此处

  • obj[]是所有对象的列表
  • obj.num是它们的计数

初始位置应该在行星附近的某个地方。它不应该太大。同时也表示速度矢量与轨道轨迹相切的方向。如果速度太低,它就会塌入行星,如果速度太高,它就会逃出行星,否则它就会绕轨道运行(圆或椭圆)

定时

间隔越低越好,一般模拟10ms就可以了,但对于大体积和远距离的物体也可以100ms以上就可以了。如果你想要粒子或其他东西,那么就使用1ms(非常动态的sceene)。

    null
 类似资料:
  • 我观察球体在场景中的行为。当施加力(或设定速度)时,球体会瞬间向右侧跳出远距离,然后缓慢地向后(向左)移动到其先前设定的位置(0,1,0)。我能看见它穿过墙。 现在我的问题是: > 为什么它向右跳(而不是移动)?我玩过冲量和速度的大小,但总是一样的。 我想要达到的行为是,在施加力后,球在我的盒子里反弹,根据物理设置。 有什么想法吗?多谢了。

  • 背景物体根据重力感应而运动 。向上下左右倾斜设备,视图上的物体会往响应的方向运动。可自定义运动速度。 [Code4App.com]

  • 给定一个9自由度的加速度计(加速度计、陀螺仪和磁强计),我想消除/补偿加速度计读数中重力的影响(加速度计可以自由旋转)。传感器以四元数表示方式给出相对于(磁)北、西和上参考坐标系的方向。 我找到这个了http://www.varesano.net/blog/fabio/simple-gravity-compensation-9-dom-imus但无法理解给定方程的基础。 我怎样才能实现上述信息?

  • 我正在构建一个迷宫游戏,在这里我有一个简单的地图... 直到没有问题,但我的问题是碰撞 这是我的地图: 在这里,我用以下代码自己构建了地图: 此碰撞代码用于右上角矩形 我已经尝试了两种不同类型的碰撞代码,但都不起作用 碰撞码: 在这里,当玩家从左侧击中矩形时,玩家向下移动,当玩家从底部击中矩形时,玩家向左移动。 我用if, else if语句尝试过相同的代码,但仍然不起作用。当玩家点击左侧时,它可

  • 我最近在skee ball风格游戏的编码方面取得了突破。我在碰撞检测方面遇到了严重问题,stackoverflow的研究人员帮我解决了这个问题。我为我的物体——一个球——编写了一个二人组,以创建一个平滑的滚动效果,因为我无法让它以其他方式平滑移动。我终于有了一个灵光乍现的时刻,并设法使物体逐渐移动,而不是远程传送,并能够消除我的吐温。没有了tween,碰撞检测工作正常。但我还是有一些问题。首先,我

  • 我真的需要一些帮助,我被卡住了。我试图在一个简单的游戏中让一个方块成为地面,另一个方块落在上面,然后可能会反弹一点,但是能够向左或向右移动盒子,从第一个方块上掉下来。有人能帮我吗? 对于任何对答案感兴趣的人,感谢PoprostuRonin和dermetfan的YouTube视频,我能够得到我正在寻找的结果,你可以在你的项目中尝试下面的代码,只需更改精灵纹理。