대상이 목표를 이룰 수 있도록 적의 위치를 ​​예측


13

내 2D 게임에는 자동으로 적을 향해 발사하여 플레이어를 도와주는 AI 포탑이 있습니다. 적의 현재 위치를 목표로하는 대신 지능적으로 발사하고 목표를 이끌고 싶습니다. 따라서 적과 포탑 발사체의 (항상 일정) 속도와 위치 벡터를 고려할 때 발사체가 적과 교차하고 충돌하기 위해 포탑이 목표로해야하는 실제 위치를 나타내는 벡터를 어떻게 찾을 수 있습니까?

수학, 알고리즘 등을 설명하는 기사에 대한 링크가 있으면 감사하겠습니다!



링크 주셔서 감사합니다! 그러나 솔루션을 읽는 것이 조금 어렵다고 생각합니다. 아마도 동일한 링크로 문제를 겪고있는 다른 사람들을 돕기 위해 제공된 링크를 사용 하여이 질문에 대한 명확한 시각적 답변을 제공 할 수 있습니다.
Larolaro

@Larolaro 나는 내 답변에 그래픽 데모를 추가하여 조금 더 잘 이해할 수 있도록했습니다.
jmacedo

답변:



3

나는 당신에게 유용하거나 정확하다고 확신하는 대답을하지 않을 것이지만 여기에 간다.
mathematica를 조금 더 연주 한 후에 (노트북 / 게시 된 노트북에 대한 답변의 끝을 확인하십시오)이 솔루션은 효율성이 가장 우수하지는 않다고 생각한 것 같습니다.

나는 이것을 당신의 문제에 해당하는 수학으로 썼습니다. 기본적으로 그것은 우리가 알아야 할 OA 변수에 대해 방정식 / 부등식을 해결합니다. 결과는 OA가 가질 수있는 가능한 솔루션과 각 솔루션이 유효한지 확인해야하는 조건을 제공합니다.

Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {OA}]
  • {BPx, BPy}는 파란색의 현재 위치입니다

  • {BVx, BVy}는 파란색의 속도 벡터입니다

  • {OPx, OPy}는 주황색의 글 머리 기호 위치입니다.

  • OV는 주황색 총알 속도 벡터의 표준입니다 (총 속도)

  • OA는 주황색의 총알 각도 (속도 각 벡터)

  • t는 총알이 파란색을 칠하는 데 필요한 시간입니다

나는 조건에 t> 0 && OV> 0을 넣으려고했지만 수학은 영원히 걸릴 것이므로 그냥 t! = 0 && OV! = 0을 사용했습니다. 오렌지와 같은 위치와 오렌지 총알이 실제로 움직일 때 (정지 상태가 아닌)

출력은 거대합니다 : http://freetexthost.com/xzhhpr5e2w

그러나 OA == _ 부품을 추출하면 다음과 같이 나타납니다.

http://freetexthost.com/iyrhqoymfo

이는 OA가 가질 수있는 값입니다 (각각 다른 조건이 유효해야 함).

우리가 원하지 않는 OV가 음수가되어야하는 솔루션을 추출하는 몇 가지 추가 분석을 통해 다음과 같은 결과를 얻었습니다.

http://freetexthost.com/iy4wxepeb6

이것들은 문제에 대한 가능한 해결책이며, 각각 다른 조건이 유효해야합니다. 특정 각도 OA가 유효한 솔루션이 되려면 다음 조건을 충족해야합니다.

Reduce[{BPx, BPy} + t*{BVx, BVy} == {OPx, OPy} + t*OV*{Cos[OA], Sin[OA]} && t != 0 && OV != 0, {t}]

산출:

(BVy - OV Sin[OA] != 0 && BPx == (BPy BVx + BVy OPx - BVx OPy - BPy OV Cos[OA] + OPy OV Cos[OA] - OPx OV Sin[OA])/(BVy - OV Sin[OA]) && t == (-BPy + OPy)/(BVy - OV Sin[OA]) &&  BPy OV - OPy OV != 0) || 
(BVy == OV Sin[OA] && BPy == OPy && BVx - OV Cos[OA] != 0 && t == (-BPx + OPx)/(BVx - OV Cos[OA]) && BPx OV - OPx OV != 0) || 
(BVy == OV Sin[OA] && BVx == OV Cos[OA] && BPy == OPy && BPx == OPx && OV t != 0)

따라서 확인하는 솔루션 만 고려하십시오 (t == _ 부품을 확인할 필요가 없습니다. 다른 조건이 유효한 경우 총알이 차량에 충돌하는 데 필요한 시간을 제공하는 솔루션입니다. t는 음수 값을 나타내므로 다른 조건을 검증하더라도 주어진 OA를 유효한 솔루션으로 간주 할 수 없습니다 (이는 t> 0 대신 t! = 0을 사용했기 때문입니다).

/math//에서 이에 대해 문의하는 것이 좋습니다 .

편집하다

이 질문에 대한 관심이 커 졌으므로 내가 설명한 모든 것을 그래픽으로 보여주는 주석이 달린 노트를 만들었습니다. 여기에서 다운로드하십시오:

http://www.2shared.com/file/pXhYyhN1/towerBullets.html
또는 여기에서 : http://www.2shared.com/file/W01g4sST/towerBullets.html

(이것은 출판 된 버전이며, 무료로 볼 수있는 mathematica 플레이어 만 있으면됩니다. mathematica가 없다면이 방법을 사용하십시오)

스크린 샷 :


조건과 솔루션에 곱셈 부호 (*)를 제공하여 프로그래밍 언어로 쉽게 포팅 할 수 있습니다 (ArcTan [...], Sin [...], Cos [...], Sqrt [...] 그리고 결국 전원 표시 (^)
jmacedo

아,이 솔루션은 잊어 버리세요. 이 질문이 병합되었으므로 첫 번째 답변의 링크는 더 나은 답변을 포함하도록 솔기됩니다.
jmacedo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.