내 게임에서 중력을 구현하려고합니다. 나는 현재 행성을 궤도에 진입해야하는 달을 가지고있다 (둘 다 내 게임에서 Cell 클래스를 사용함).libgdx에서 순환 궤도 만들기
다음 코드를 사용 (단축) : 클래스 셀에서
: 클래스 GravityField에서
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;
}
: 내 GravityField에 따라서
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에 적용하고 끌어 당긴 세포.
셀은 셀은
pos.add(drg);
와
pos.add(vel);
내 궤도에서
() 메소드 내가 찾으려고 노력하고 있어요 및 설정 VEL와 자신의 movementVector의 VEL쪽으로 graviator으로 이동 원형 궤도를 만들기 위해.
내 문제는 어떻게 든 완벽 한 궤도를 얻을 수 없다는 것입니다. 달은 여전히 약간이며 점점 더 지구쪽으로 가속화되고 있습니다.
왜 작동하지 않는지 알 수 없습니다. 올바른 수식을 사용합니까?
써내 내가 사용 : 내 OrbitVector 속도 행성
여러분의 도움에 감사드립니다 행성을 향해 가속 a= f/m
으로 puling 힘에 대한 f = M*m/r^2
에 대한
v= sqrt((M*m)/r)
!
그럼 그거 ... :
나는 최근에 같은 일을했다, 난 심지어 유래에 대한 질문을 여기 링크입니다. 물리 시스템을 구현하려고합니다. 궤도는 역동적이어야하고 여러 가지 영향을주는 별의 몸을 지원해야합니다. – Superwutz