2017-12-10 21 views
0

최대 속도가 설정된 2 차원 물체를 시뮬레이트하려고하는데 최대 속도 일 때 물체의 움직임을 수학적 모델로 구성하는 것이 어렵습니다. 그것은 모두 올바른 방향으로 움직이지 않고 있습니다. 가속도가 부분적으로 최대 속도 제한에 의해 차단되었습니다.최대 속도로 일정 가속도로 물체 시뮬레이션하기

예. 최대 속도는 √2이고, 현재 (1,1)로 향하고 있고 실제로는 (√2, 0)으로 향해야합니다. x 축을 따라 직접 가속하면 속도 제한이 깨집니다.

대신에 시간의 경과에 따라 정확한 속도로 반올림하는 것이 필요합니다. 내가 너무 높을 때 새로운 속도를 계산하고 최대하여 확장됩니다하고있는 일이 있었나 : 작업 (일종의) 않습니다,하지만 난 부드럽고 수를 리팩토링 할 필요가있어

newVelocity = oldVelocity + acceleration * dt; 
if(newVelocity.getLength() > maxSpeed){ 
    newVelocity = newVelocity.scale(maxSpeed); 
} 

- 시뮬레이션의 세분성에 의존하지 않는 - 현재로서는 dt 값의 절반으로 두 패스와 반대되는 한 패스를 수행하면 다른 결과를 얻습니다.

난 할 노력 해왔다하면 속도가 원

Diagram of what I mean

그러나의 탄젠트으로 적용 가속도의 양을 계산 한 후 원의 포인트 인, 그리고 모델은 (이다 그리고 이것은 나의 역학과 미적분이 실패한 곳이다.) 현재 속도 각과 시간에 기반한 공식에 적용된 가속도로부터 도출 된 순간 각속도의 계산을 어떻게 돌릴 것인가? 단일 시뮬레이션 틱.

나는이 문제가 상당히 간단한 해결책을 가지고 있음을 거의 확신하고있다. 나는 단지 구글을 위해 어떤 용어 집합을 만들지 못하고있다.

+0

속도 벡터를 다시 스케일링하여 한계를 초과 할 때 속도를 클램프하지 않는 이유는 무엇입니까? – meowgoesthedog

답변

0

현재 v = (1,1)이고 v = (√2, 0)으로 가속하려는 경우 두 가지 옵션이 있습니다.

  1. 는 = (√2,0)를 일정한 가속도 비례를 적용하여 V에 V = (1,1)에서 직선을 따라 (√2-1,1) 시간 동안. 이 시간 동안 물체는 최대 속도보다 느려지지만 최대한 빨리 원하는 속도로 이동합니다.

  2. 현재 속도에 수직 인 방향으로 최대 가속도를 적용하여 최대 속도 곡선을 따라 가십시오. 이 경우 오른쪽으로 돌리려고합니다. 따라서 속도가 (1,1) 일 때 가속도가 (1, -1)에 비례하고 속도가 (√2,0)이되기 바로 전에 속도가 거의 (0, -√2)에 비례한다. 이것이 당신이하고 싶은 하나 인 것처럼 들리지만, 반드시 최적이라고는 할 수 없습니다.

이제 몇 가지 빠른 계산이 가능합니다. 귀하의 속도 원은 반경이 maxSpeed이고, 원주가 2*π*maxSpeed이고 두 개의 최대 속도 점 사이의이 원을 따른 거리가 θ*maxSpeed입니다. 여기서 θ는 속도 사이의 각도입니다. maxAcceleration으로 가속 할 수 있고 단계가 dt 초인 경우 동그라미 따라 거리가 maxAcceleration*dt, 또는 각도가 maxAcceleration*dt/maxSpeed이됩니다.따라서 현재 속도 각이 θ 인 경우 단계의 끝에서 각도는 θ +/- maxAcceleration*dt/maxSpeed이어야합니다.