나는 DIY 물리학을 배우는 방법을 배우기 시작했으며, 가장 기본적인 수준에서 통합을 구현하는 것에 대한 질문이 있습니다 (즉 , 오일러 대 RK4 질문 이 아닙니다 ).
거의 모든 예제 integrate()
에는 마지막 업데이트 이후의 시간 단계를 가져오고 마지막 업데이트 이후의 가속도 및 / 또는 속도 및 / 또는 위치를 업데이트하는 기능이 있습니다.
가장 간단한 형태로 : position += velocity * deltaTime
그러나 함수 를 변경하여 쉽게 얻을 수있을 때 왜 이렇게 누적되는지 이해하지 못합니다 . 예를 들어 : 은의 getPosition = makeNewFunction()
서명을 가진 것을 반환 할 수 있으며 Time -> Position
해당 함수의 내부 작업은 적절한 수학 공식을 통해 생성됩니다.
그런 식으로, 축적이 없습니다 ... 위치를 얻을 필요가있을 때마다 현재 시간으로 그 기능을 호출합니다.
내 초보자 이해는 이것이 누적으로 인한 오류를 피할 수 있다는 것입니다. 그래서 왜 이것이 작동하지 않습니까?
(fwiw 나는 이 아이디어의 기본 개념 증명을 작성했지만 동시에 몇 가지 다른 것들을 테스트하므로 가장 깨끗한 예는 아닙니다 : https://github.com/dakom/ball-bounce-frp )
편집 1 : 의견에서 언급했듯이 아직 가속을 변경하거나 저크 및 일정한 가속보다 고차 통합이 필요한 다른 것들을 다루는 것에 대해 배우지 않았다는 것을 지적하는 것이 중요합니다 .
편집 2 : 여기에 아이디어의 기본적인 샘플 코드, 그리고 의사 자바 스크립트 구문 - 참고 getKinematicPosition
한다 부분적으로 적용 단지 시간의 새로운 기능 반환되도록 -> 위치를 :
나는 여기에 위치를 고집하고 있지만 그것은 다른 getVelocity
것 같아요.
getKinematicPosition = initialVelocity => acceleration => time =>
((.5 *acceleration) * (time * time)) + (initialVelocity * time);
getPosition = getKinematicPosition ([0,0,0]) (GRAVITY);
onTick = totalTime => {
position = getPosition (totalTime);
onCollision = () => {
getPosition = changeTheFunction(totalTime);
//changeTheFunction uses totalTime to base updates from 0
//it could use getKinematicPosition or something else entirely
}
}