게임을위한 "인터셉트 미사일"을 만드는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1202391

  •  05-07-2019
  •  | 
  •  

문제

나는 내가 일하고있는 게임을 가지고 있습니다. 현재 그들은 단지 목표를 향해 바뀌어 모든 미사일이 목표를 따라 다소 멍청한 결과를 초래합니다.

나는 대상이 어디에 도착할 때까지 대상이 어디에 있을지를 목표로하는 더 치명적인 미사일의 맛을 만들고 싶다.

나는 내 목표가 미래의 어느 시점에있을 곳을 알아 내야 할 것이라고 생각하지만 (어쨌든 추측), 나는 얼마나 멀리 보이기 위해 내 머리를 얻을 수 없다. 그것은 미사일이 목표에서 얼마나 멀리 떨어져 있는지에 근거해야하지만, 목표도 움직이는 대상이어야합니다.

내 미사일은 끊임없는 추력을 가지고 있으며 약한 회전 능력과 결합되어 있습니다. 희망은 빠르고 흥미로울 것이지만 소처럼 조종 할 것이라는 희망입니다 (예 : 히치하이커가 아닌 팬들에게는 나쁘게).

어쨌든, 스택 오버플로가 해결하는 데 도움이되는 재미있는 문제처럼 보였으므로, 더 나은 아이디어 또는 "더 재미있는"미사일에 대한 모든 아이디어 나 제안은 모두 감사하게받을 것입니다.

다음은 피하기위한 AI가 될 것입니다 ...

도움이 되었습니까?

해결책

당신이 제안하는 것은 "명령지도"라고하지만 더 쉽고 더 나은 방법이 있습니다.

실제 미사일이 일반적으로 수행하는 방식 (모두와 비슷한 것은 아닙니다)은 비례 탐색이라는 시스템을 사용하는 것입니다. 이것은 미사일이 미사일과 대상 사이의 라인 라인 (LOS)이 LOS 속도에 "비례 적"속도로 회전하고 있음을 의미합니다 ... 이것은 당신이 당신의 일을 할 것임을 의미합니다. LOS 비율이 0 일 때와 같이 요청하면 충돌 과정에 있습니다.

Misile과 Target 사이의 라인의 경사면을 1 초에서 다음 1 초에서 비교하여 LOS 속도를 계산할 수 있습니다. 그 경사가 변하지 않으면 충돌 과정에 있습니다. 변화하는 경우 변화를 계산하고 미사일을 비례 각도 속도로 돌리십시오 ... 미사일과 목표 위치를 나타내는 메트릭을 사용할 수 있습니다.

예를 들어, 비례 상수 2의 비례 상수를 사용하고 LOS가 오른쪽으로 2도/초로 이동하는 경우 미사일을 4도/초에서 오른쪽으로 돌립니다. 6 ℃에서 왼쪽으로 로스, 미사일은 왼쪽으로 12도/초 ...

"LOS 속도의 변화"(및 결과 미사일 회전 속도)를 제외하고는 3D 문제가 동일합니다. (그리고 결과 미사일 회전율) 자체는 벡터입니다. 오른쪽의 위 또는 아래 또는 30도 이상의 오른쪽 등.

레이더 가이드 미사일로, 폐쇄율을 "알고". 폐쇄에 따라 비례 상수를 조정하십시오 (폐쇄가 높을수록 미사일이 더 빨리 회전하려는 시도가 더 빨라질 수 있음), 미사일이 높은 폐쇄 시나리오 (비행 시간이 낮은 경우)에서 더 적극적으로 회전 할 수 있도록하고, 낮은 폐쇄에서는 적극적으로 덜 적극적으로 변합니다. (꼬리 추적) 에너지를 절약해야 할 때. 폐쇄를 알지 못하는 다른 미사일 (예 : 측면 와이드)은 일정한 미리 결정된 비례 값을 사용합니다). FWIW, 베트남 시대 AIM-9 사이드 윈더는 4의 비례 상수를 사용했습니다.

다른 팁

나는이 CodeProject 기사를 전에 사용했는데, 그것은 수학을 설명하기 위해 정말 좋은 애니메이션이 있습니다.

"미사일을 타겟팅하고 시뮬레이션하는 수학 : 미적분학에서 4 중 공식까지":http://www.codeproject.com/kb/recipes/missile_guidance_system.aspx

(또한 해당 기사의 맨 아래에있는 의견에 숨겨진 동일한 작업을 수행하는 일부 C ++ 코드 비현실적인 위키에서)

보세요 오픈 스티어. 이와 같은 문제를 해결하기위한 코드가 있습니다. 'Steerforseek'또는 'Steerforpursuit'를보십시오.

시간 변화에 대한 최근의 베어링 변화에 대한 부정적인 피드백을 고려해 보셨습니까?

세부 사항은 운동으로 남았습니다.

제안은 완전히 심각합니다. 대상이 기동하지 않으면 거의 최적의 절편을 얻어야합니다. 목표가 적극적으로 피하는 경우에도 수렴해야합니다.

자세한 내용이 필요하십니까?

쉽게 표기하기 위해 2 차원 공간에서 해결. 가져가다 \vec{m} 미사일과 벡터의 위치가됩니다 \vec{t} 대상의 위치가됩니다. 지난 시간 단위에 걸친 움직임 방향으로의 현재 제목 : \vec{h} = \bar{\vec{m}_i - \vec{m}_i-1}}. r이 미사일과 목표 사이의 정규화 된 벡터가되도록하십시오. \vec{r} = \bar{\vec{t} - \vec{m}}. 베어링은입니다 b = \vec{r} \dot \vec{h} 매번 베어링을 계산하고 그 변화를 변화시키고 그 양을 최소화하기 위해 제목을 변경하십시오.

각 단계에서 행동 평면을 찾아야하기 때문에 수학은 3D의 해리에이지만 프로세스는 동일합니다.

시간의 함수로서 대상과 미사일의 궤적을 보간하고 싶을 것입니다. 그런 다음 객체의 좌표가 허용 가능한 오류 내에있는 시간을 찾으십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top