我想在我的遊戲中實現Gravity。 我目前有一個月球應該繞行星運行(兩者都使用我的遊戲中的Cell類)。在libgdx中創建一個圓形軌道
下面的代碼被使用(縮短):
在類細胞:
private Cell graviator;
private Vector2 pos;
private Vector2 vel;
private Vector2 drg;
private int mass;
private float drgSpeed;
private GravityField grav=new GravityField(this);
public void move(){
calculateDrag();
if(orbiting){
orbit();
}
pos.add(vel);
pos.add(drg);
}
private void calculateDrag() {
drg.scl(drgSpeed);
}
private void orbit(){
Vector2 temp=new Vector2(drg.x,drg.y);
temp.rotate90(0);
temp.nor();
speed=(float)Math.sqrt((mass+graviator.getMass())/getGraviatorDistance()); // v= sqrt((M*m)/r)
temp.scl(speed);
vel=temp;
}
在類重力場:
private Cell cell;
public void computeGravity(Cell cell2) {
float force = getForce(cell2);
if (cell != cell2.getGraviator()) {
if (cell2.getMass() < cell.getMass()) {
if (force > cell2.getLargestForce()) {
cell2.setGraviator(cell);
cell2.setLargestForce(force);
cell2.setDrg(getDragVector(cell2));
cell2.setDrgAcc(getAcceleration(cell2));
}
}
} else {
cell2.setLargestForce(force);
cell2.setDrg(getDragVector(cell2));
cell2.setDrgAcc(getAcceleration(cell2));
}
}
public Vector2 getDragVector(Cell cell2) {
Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y);
temp.nor();
return temp;
}
public Vector2 getDirection(Cell cell2) {
return new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y);
}
public float getDistance(Vector2 direction) {
return direction.len();
}
public float getForce(Cell cell2) {
Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y);
return cell.getMass() * cell2.getMass()/(temp.len() * temp.len()); //f = M*m/r^2
}
public float getAcceleration(Cell cell2) {
Vector2 temp = new Vector2(cell.getPos().x - cell2.getPos().x, cell.getPos().y - cell2.getPos().y);
float force = cell.getMass() * cell2.getMass()/(temp.len() * temp.len());
float acceleration = force/cell2.getMass(); // a= f/m
return acceleration;
}
與我的重力場
,所以我基本上施加dragVector到被拉的細胞。
細胞,細胞是朝graviator移動與
pos.add(drg);
,並朝與
pos.add(vel);
在我的軌道上()方法,我試圖找到並設置VEL自己的movementVector VEL做一個圓形軌道。
我的問題是,我莫名其妙地無法完成軌道。月亮仍然略微縮小,距離越來越遠,對地球的影響越來越大。
我不知道爲什麼它不工作。我是否使用正確的公式?
寫出我用:
v= sqrt((M*m)/r)
我OrbitVector速度 f = M*m/r^2
用於向地球 a= f/m
爲加速向地球
謝謝您的幫助蒲凌力!
好that's不是我想要什麼。 我想實現一個物理系統。軌道應該是動態的並且支持多重影響星體。 – Superwutz