빠른 물체와 얇은 벽
지나간 길을 보지 않으면, 충돌을 놓칠 수 있습니다.
3D 화면을 사용할 수 없어 2D 단면으로 전환했습니다. 조건 조절과 실험은 계속할 수 있습니다.
스텝 끝의 위치가 벽과 겹치는지 검사
이동 경로에서 처음 닿는 지점을 검사
드래그로 회전 · 휠/핀치로 확대 · 두 손가락으로 이동
실험을 조작하려면 JavaScript를 켜주세요.
먼저 이렇게 해보세요. ‘벽 통과 예시’에서 ‘한 스텝’을 누르고, 2D 단면으로 바꿔 두 탄환의 정지 위치를 비교하세요.
게임은 일정한 시간 간격으로 물리를 계산합니다. 검사한 위치가 벽 앞에서 벽 뒤로 바뀌면, 두 위치 모두 벽과 겹치지 않을 수 있습니다. 경로 중간의 충돌을 놓치는 현상이 터널링입니다.
한 스텝의 이동 거리는 속도 ÷ 초당 물리 검사 횟수입니다. 기본 조건에서는 9 m를 이동해 중심이 −5 m에서 4 m로 건너뜁니다. 벽 두께와 탄환 크기, 검사 위치가 함께 충돌 감지 여부를 결정합니다. 화면을 천천히 재생해도 검사 간격은 그대로입니다.
‘촘촘한 검사’는 초당 120번 검사해 위치 사이 간격을 줄입니다. 이 조건에서 A는 충돌을 잡지만, 더 빠르거나 얇은 다른 조건까지 보장하지는 않습니다. B는 이동 경로의 최초 접촉을 계산하므로, 스텝 끝에 닿아 있지 않아도 충돌을 찾습니다.
2D의 점선 원은 충돌이 없을 때의 예정 위치입니다. 기본 조건에서 B의 중심은 −0.31 m, 벽 표면은 −0.15 m이며, 그 차이 0.16 m가 탄환 반지름입니다.
검사 빈도를 높이면 초당 물리 계산이 늘고, 경로 검사에는 접촉 시점을 찾는 계산이 필요합니다. 빠른 물체에 우선 적용할 수 있지만, 회전·가속·움직이는 상대와 충돌 뒤의 반응은 별도 처리가 필요합니다. 여기서는 정지한 벽을 향한 일정 속도의 직선 운동을 비교합니다.
A의 시간은 스텝 끝에 충돌을 감지한 시각, B의 시간은 스텝 안에서 처음 닿은 시각입니다. 아래 재생 막대는 완료한 스텝의 시간을 표시합니다. ‘검사’는 각 판정 함수의 호출 횟수입니다.