내 2D 게임에는 자동으로 적을 향해 발사하여 플레이어를 도와주는 AI 포탑이 있습니다. 적의 현재 위치를 목표로하는 대신 지능적으로 발사하고 목표를 이끌고 싶습니다. 따라서 적과 포탑 발사체의 (항상 일정) 속도와 위치 벡터를 고려할 때 발사체가 적과 교차하고 충돌하기 위해 포탑이 목표로해야하는 실제 위치를 나타내는 벡터를 어떻게 찾을 수 있습니까?
수학, 알고리즘 등을 설명하는 기사에 대한 링크가 있으면 감사하겠습니다!
내 2D 게임에는 자동으로 적을 향해 발사하여 플레이어를 도와주는 AI 포탑이 있습니다. 적의 현재 위치를 목표로하는 대신 지능적으로 발사하고 목표를 이끌고 싶습니다. 따라서 적과 포탑 발사체의 (항상 일정) 속도와 위치 벡터를 고려할 때 발사체가 적과 교차하고 충돌하기 위해 포탑이 목표로해야하는 실제 위치를 나타내는 벡터를 어떻게 찾을 수 있습니까?
수학, 알고리즘 등을 설명하는 기사에 대한 링크가 있으면 감사하겠습니다!
답변:
GameDev 에 대한이 질문과 StackOverflow에 대한이 질문 은 찾고있는 답변을 제공해야합니다. :)
나는 당신에게 유용하거나 정확하다고 확신하는 대답을하지 않을 것이지만 여기에 간다.
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가 없다면이 방법을 사용하십시오)
스크린 샷 :