2D 물리 : 이전 위치 저장과 속도 저장


9

객체의 이전 위치가 속도 벡터 대신 상태로 저장된 많은 2D 게임 튜토리얼과 서적을 보았습니다. 그런 다음 각 프레임마다 위치 차이로 속도가 계산됩니다.

그 방법의 장점은 무엇입니까?


2
문맥에 따라 해당 튜토리얼에 링크 할 수 있습니까?
Anko

나는 Anko의 동일한 호기심을 공유
dnk drone.vs.drones

이 튜토리얼 에서는이를 Verlet 통합이라고합니다. Verlet의 장점을 설명하는 이 기사를 찾았습니다 . 기본적으로 충돌 및 복잡한 제약 조건을 다루기가 더 쉽습니다.
Terzalo

@Terzalo 업데이트 된 버전의 내 답변이 특정 사례의 일반적인 논리를 이해하는 데 도움이되는지 확인하십시오
MAnd

답변:


1

여러분이 읽은 튜토리얼이나 책을 정확히 알지 못하면 여기에 내가 말할 수있는 것이 있습니다.

물리 정의 측면에서보다 정확하려면 벡터 방향은 현재 위치와 마지막 위치의 차이로 계산됩니다. 벡터 속도는 한 위치에서 다른 위치로 갈 때 경과 시간으로 나눈 것과 같습니다. 참조 : http://www.physicsclassroom.com/class/1DKin/Lesson-1/Speed-and-Velocity

그러나, 경과 된 시간이 일반적인 "1 프레임", 즉 마지막 프레임에서 현재까지 고려 될 때, 벡터 속도 및 벡터 방향은 동일하게된다. 의사 코드에서 :

direction = current_position - past_position
elapsed_time = 1 frame
velocity = direction / elapsed_time

따라서 일반적으로 마지막 프레임에 위치를 저장하고 현재 프레임에서 위치를 얻는 주된 이유는 업데이트 된 방향 (및 업데이트 된 속도)을 알 수있는 유일한 방법이거나 가장 저렴한 방법 일 수 있기 때문입니다. 즉, 현재 프레임에서의 이동 방향.

주어진 프레임에 방향 (또는 속도)을 저장한다고 가정하십시오. 다음 프레임에서 방향 (또는 속도)이 변경되었는지 알 수있는 유일한 방법은 다시 계산하는 것입니다. 그 이유는 이전 방향 또는 이전 속도 때문에 한 프레임에서 다음 프레임으로 이동이 변경된 경우 현재 방향 또는 현재 속도를 알 수 없습니다.

이제 자신의 질문에 대한 주석에서 언급 한 자습서를 고려하면 더 명확 해집니다. 튜토리얼 중 하나에서 저자는 다음과 같이 말합니다.

이제 파티클에 Verlet 통합으로 이동하는 방법을 알려 드리겠습니다. 이는이 프레임의 위치를 ​​마지막 프레임의 위치와 비교하여 입자가 얼마나 빠르게 움직이는 지 알 수있는 멋진 방법입니다. 왜? 입자의 현재 위치가 바뀌면 속도가 자동으로 업데이트됩니다.

보시다시피, 마지막 프레임 위치를 저장하면 위에서 말했듯이 객체 (자습서에서 입자)가 위치를 변경할 때 현재 프레임의 속도 계산이 업데이트됩니다. 마지막 프레임에서 방향 또는 속도 저장 한 경우 위치가 과거에서 현재 프레임으로 변경된 경우 쉽게 업데이트 할 수 없습니다. 따라서 연결된 다른 자습서에서 지적했듯이 이전 위치를 저장하면 위치가 변경 될 때 속도를 자동으로 업데이트 할 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.