2016-11-14 2 views
0

나는 지금 내 책상 옆에있는 객체와 내가 작업하고있는 프로그램의 자바 객체를 가지고 있다고 해봅시다. 실제 물체를 떨어 뜨리면 9.81m/s의 속도로 바람을 가라 앉히고 속도는 9.81m/s/s가 될 것이고 전체적인 위치는 9.81m/s가 될 것입니다./s/s로 시작됩니다. 내 자바 객체가 나는 그런중력 시뮬레이션

public class HypotheticalObjectClass(){ 

    double position = 0, velocity = 0; 

    tick(){ 
     velocity += 9.81; 
     position += velocity; 
    } 

} 

이 프로그램처럼 할 것이 시뮬레이션과 자바 프로그램을 작성하는 경우 이제

는 한 내가 두 번째 한 번 틱()를 호출 가지고 정확하지만 경우 그것은 미적분 등으로 인해 두 번째 위치가 급상승했다는 것입니다 ...이 프로그램을 여러 번 틱하려고합니다. 따라서 속도, 위치, 회전 등의 순시 값만 계산하면 어떻게 수정합니까? ...) 가능하지 않다면 추가 할 필요가있는 시스템은 무엇입니까?

죄송합니다.이 사이트에서이 질문에 대한 답변을 이미 찾았 으면 어떻게 될지 모르겠으며 도움을 주셔서 감사드립니다.

답변

0

tick 호출 간의 시간차를 알아야하며 그에 따라 가속 및 속도를 조정할 수 있습니다. accelaration는 units/sunits/s^2 속도 인 경우

public class HypotheticalObjectClass(){ 

    double position = 0, velocity = 0; 

    public void tick(double dt) { 
     velocity += 9.81 * dt; 
     position += velocity * dt; 
    } 

} 

다음 dt초 함수 호출 사이의 시간 차이이다. 따라서 1 초에 한 번 전화하면 obj.tick(1.0)으로 전화해야합니다. 그러나 가장 좋은 생각은 언급 한 것처럼 시차가 항상 정확히 동일하지 않기 때문에 통화 간 시간을 측정하는 것입니다.

이 방법은 매우 정확하지만 종종 충분히 좋습니다. 물리 시뮬레이션에 대한 자세한 내용은 다음을 참조하십시오. http://gafferongames.com/game-physics/integration-basics/

+0

프로그램의 다른 곳에서 호출을 타이밍하기위한 시스템이 있지만 실제 문제는 훨씬 더 혼란스럽고보기가 어렵습니다. 속도를 초당 30 번 틱하면 30 분의 9.81m/s 속도로 속도를 올린 다음 위치에 속도를 더하는 것이 좋습니다. 그러나 두 번째로 속도를 9.81로 1/9, 속도를 1/30, 2/30을 9.81로 3/30의 속도로 올리면 8 번째 틱으로 이미 적절한 위치에 도달했으며 계속해서 크게 오버 슈트합니다. 위치가 얼마나 빨리 축적되는지에 따라 정확성이 떨어집니다. – jotnova

+1

수치 적분은 결코 100 % 정확하지 않습니다. 주어진 기사를 읽으십시오. – Rames

+0

오, 미안, 나는 마지막 부분을 완전히 놓쳤다. – jotnova