AI가 목표에 도달 할 수있는 올바른 속도 찾기


10

나는 최대 속도로 여행하고 초당도 maxSpeed를 돌릴 수 있는 배를 가지고 있습니다 rotationSpeed. 선박은 항상 자신이 향하는 방향으로 움직입니다. 즉, 선박이 빠르게 이동할수록 선회 반경이 커집니다.

내 위치, 회전 및 대상 위치를 알고 있습니다.

내가 알아 내고 싶은 것은 목표가이 속도로 회전 반경 안에 있는지 또는 더 나은지, 내가 이동할 수있는 최대 속도는 목표를 계속 돌지 않고 목표를 향하게하는 것입니다.

이것을 수행하는 효율적인 (쉬운) 방법이 있습니까?

지금까지 내가 생각하고있는 것은 다음과 같습니다. 걸음 당 이동 거리와 걸음 당 회전 속도를 알기 때문에 다음 두 프레임의 위치를 ​​파악할 수 있습니다. 내 현재 위치는 p1, 다음 위치는 p2, p3입니다. (p1, p2)와 (p2, p3)의 수직 이등분선을 취할 수 있습니다. 그들의 교차점은 나에게 원의 중심을 줄 것입니다. 그런 다음 대상이 해당 원 안에 있는지 테스트 할 수 있습니다.

이것이 3D로 작동하는지 확실하지 않습니다 (입력으로 구를 계산하는 방법을 잘 모르겠습니다). 이 솔루션은 여행에 적합한 속도를 찾는 데 너무 도움이되지 않습니다. 합리적인 속도를 찾기 위해 다른 속도로 몇 번 시도해야합니다.

더 나은 솔루션에 대해 누구나 밝힐 수 있습니까?

답변:


17

바운드 회전 속도와 조절 가능한 이동 속도를 가진 AI 제어 장치가 목표에 도달하는 방법에는 두 가지가 있습니다.

먼저, 우리가 제시 한 도전을 고려하여 더 잘 이해할 수 있도록하십시오.

여기에 이미지 설명을 입력하십시오

플레이어가 오른쪽 또는 왼쪽에있는 목표에 도달하려고 할 때 일정한 속도로 움직이고 회전하는 경우 절대 목표를 향하지 않고 계속 원을 그리며 움직입니다. 플레이어가 동그라미 칠 두 영역은 위에 빨간색으로 표시됩니다.

빨간색으로 표시된 원형 영역은 다음과 같이 계산할 수 있습니다.

radius = movementSpeed / rotationSpeedInRadians;
circlesCenterX = unitX + cos(unitAngle + / - PI) * radius;
circlesCenterY = unitY + sin(unitAngle + / - PI) * radius;

그 결과 빨간색 원의 위치와 반지름이 나타납니다. 이를 통해 특정 목표가 목표 방향을 향해 계속 돌고있는 경우 AI 제어 장치의 도달 범위를 벗어난 것인지 확인할 수 있습니다.

특정 항목이 원 중 하나에 있는지 알아 보려면 원의 중심으로부터의 거리를 계산하면됩니다.

if ((circleX - goalX)^2 + (circleY - goalY)^2 < radius^2) //goal is within red circle

이에 대한 두 가지 가능한 솔루션이 있습니다.

1.

목표가 원형 적색 영역을 벗어날 때까지 약간의 거리를두고 U 턴 방식으로 돌아서십시오. 이것은 목표가이 원 안에 있지 않다는 확인이 반환 될 때까지 유닛이 계속 움직이게합니다. 그럼 당신은 돌아서 수 있습니다.

여기에 이미지 설명을 입력하십시오

다른 옵션은 계산하는 데 약간의 작업이 더 필요합니다.

AI 유닛과 목표 사이에 가상의 선을 그립니다. 그들 사이의 각도를 사용하여 :

angle = Math.atan2(goalY - unitY, goalX - unitX);

이제 올바른 속도를 계산하려면 다음을 수행해야합니다.

correctSpeed = rotationSpeedInRadians * (distance / 2) / cos(angle);

여기에 이미지 설명을 입력하십시오

3D 사례에서 작동하게하려면 :

다음 세 점이있는 평면을 찾으십시오.

  1. 목표 포인트.
  2. 이전 프레임에서 AI 장치의 위치.
  3. AI 장치의 현재 위치입니다.

이 평면을 사용하여 2D 방식으로 속도를 계산할 수 있습니다. 점을 3d 값에서 공통 평면에 포함 된 2d 값으로 변환하면됩니다.

이것을 사용하고 싶을 수도 있습니다.

평면의 3D 점을 UV 좌표로 변환하는 방법은 무엇입니까?


완전한! 내가 바랐던 대답은 정확히! 자세한 설명을 보내 주셔서 감사합니다. 이것에 대해 추정하고 3D로 사용할 수 있다고 생각합니다.
weichsem

@weichsem 나는 대답을 업데이트했습니다. 내가 제안한 아이디어는 공유하는 일반적인 2D 평원을 찾아 정확한 속도를 계산하는 데 사용하는 것입니다.
AturSams
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.