미사일로 향하는 방향을 계산하는 방법?


14

나는 우주선에서 비스듬히 발사 된 미사일을 가지고 있고, 미사일은 주어진 회전 반경을 가진 원호에서 목표를 향해 회전합니다. 미사일이 목표물을 향하도록 선회를 시작할 때 호의 점을 어떻게 결정합니까?

편집하다

미사일을 발사하기 전에해야 할 일은 비행 경로를 계산하고 그리는 것입니다. 첨부 된 예에서 발사체는 90 도의 방향을 가지며 목표물은 뒤에 있습니다. 두 미사일은 발사 차량의 제목과 -45도 또는 + 45 도의 상대 방향으로 발사됩니다. 미사일은 초기에 알려진 회전 반경으로 목표를 향해 회전합니다. 나는 턴이 미사일을 목표로 직접 공격 할 방향으로 향하는 지점을 계산해야한다. 분명히 목표가 45도 또는 그 근처에 있다면 초기 회전이 없으며 미사일은 목표를 향해 직진합니다.

미사일이 발사 된 후지도는이 노선의 비행 경로를 나타내는 미사일 추적도 보여줍니다.

내가하고있는 일은 운영 소프트웨어를 모방 한 시뮬레이터에서 작업하는 것입니다. 미사일을 발사하기 전에 계산 된 비행 경로를 그려야합니다.

두 개의 목표물을 목표로하는 두 개의 미사일

이 예에서 대상은 발사체 뒤에 있지만 미리 계산 된 경로가 그려집니다.


1
제목이 미리 계산되었거나 궤적 중에 변경됩니까? (귀환 미사일처럼?)
Jonathan Connell

1
(x2-x1) ^ 2 + (y2-y1) ^ 2 = r ^ 2 일 때가 아닌가? (x1, y1)은 현재 미사일 위치이고 (x2, y2)는 목표입니까?
공산주의 오리

어쩌면 원하는 것을 그려야 할 수도 있습니다.
aaaaaaaaaaaa

3
이것이 2D 또는 3D 문제입니까?
Steve H

귀환 미사일과 같은 것을 찾고 있다면 삼각법을 사용하지 않고도 할 수 있습니다. 참조 이 질문을
BlueRaja - 대니 Pflughoeft

답변:


9

내 수학이 약간 틀릴 수 있으므로 답을 Wiki했습니다.

속도 V1으로 이동하는 미사일 P1이 지속적으로 플레이어 P2를 향해 회전하려고 시도하는 연속 귀환 시나리오를 원한다고 가정합니다. 그러나 선회율이 제한되어 있습니다.

  1. 플레이어와 미사일 사이의 벡터를 결정하십시오.

    V2 = P2 - P1
  2. 그것들을 단위 벡터로 바꾸십시오.

    V3 = UNIT(V1)
    V4 = UNIT(V2)
  3. 벡터 사이의 각도를 결정하십시오.

    a = ARCCOS(V3 * V4) (* indicating dot product)
  4. 그들 사이의 각도 값을 제한하십시오 (삼각 기능은 라디안과 함께 작동하므로 회전 속도로 0.1을 시도하십시오).

    a = SIGN(a) * MINIMUM(ABS(a), MaximumTurningRate)
  5. 새로운 움직임 벡터를 만듭니다.

    V1 = UNIT(V3.x + SIN(a), V4.y + COS(a)) * MissileSpeed

편집 : 지속적인 원점 수행 시나리오에 대해보다 강력하고 쉬운 구현이므로 '시작점'이 없습니다. 원의 시작점을 찾을 필요는 없습니다. 미사일이 방향을 바꿀 수있는 속도를 제한하고 나머지는 기계의 유령 때문에 발생합니다.


1
음 .. 메모리가 제공된다면 각도의 방향을 얻으려면 교차 곱을해야한다고 생각합니다. 내적을 수행하는 경우 각도의 크기는 알지만 방향은 알 수 없습니다 (점 제품은 V3 * V4 = V4 * V3을 가질 수 있으므로 방향의 차이를 확인할 방법이없는 것 같습니다). 따라서 내적을 수행 한 다음 Z 좌표의 부호를 확인하여 교차 곱을 수행하여 방향을 찾으십시오.
ChrisE

@ChrisE 예제는 2D (5 참조)이므로 원래 방향과 각도 크기로 충분합니다.
Keeblebrox

사이의 각도를 계산하는 것이 맞지만 5 단계에서 언급 한 의도가 무엇인지 또는 그것이 생산하는 것이 확실하지 않습니다. 5 단계는 수학을 이해하지 못하기 때문에 v3에 각도 a를 추가한다고 가정합니다.
dlots

@dlots 단계 5는 현재 이동 벡터에 새로운 '제한된 회전 속도 각도'를 추가해야합니다. 기본적으로 미사일의 방향이 변경됩니다.
Jonathan Dickinson

SIGN4 단계에서 무엇입니까 ?
Daniel Kaplan

2

발사 방향을 목표 방향으로 변경하여 방향을 변경하고 목표 방향으로 계속 직진하고 싶다고 가정합니다 (회전 할 때 목표를 맞추는 것이 더 재미있는 문제입니다).

나는 당신이 모든 방향에서 같은 회전 반경으로 돌릴 수 있다고 가정해야합니다 (이것은 실제 미사일에서는보기 어려운 단순화입니다).

가장 간단한 해결책은 90 ° 굽힘 을 사용하는 것입니다 . 미사일은 궤도와 목표물이 직각을 이루도록합니다. 90 ° 지점에서 정확하게 선회하면 선회 자체를 고려해야하기 때문에 선회 반경을 기준으로 정확하게 목표를 놓치게됩니다. 해결책은 90 ° 포인트에 도달하기 전에 정확히 "턴 반경"미터 (?)를 돌리기 시작한 다음 90 ° 호를 형성하여 목표로 바로 이동하는 것입니다.

예를 들어 90 ° 경로 (건물 또는 기타 장애물)에 가시성이없는 경우이 솔루션이 항상 실현 가능한 것은 아닙니다.

다행스럽게도이 솔루션은 신화적인 90 °뿐만 아니라 모든 각도에서 작동하기 때문에 선삭을 시작하기 전에 회전하는 데 필요한 공간을 고려해야합니다.

얼마 전에 요? 이것이 90 ° 재료가 가장 간단한 솔루션 인 이유입니다 ...

발사 경로가 θ °의 각도를 형성 할 때 가시성 또는 최고의 목표 방향에 도달했다고 가정하면 다음과 같이 회전을 예상해야합니다.

(sec(90° - θ°) + tan(90° - θ°)) * turning_radius

여기서 시컨트는 코사인의 역수입니다. 증거는 사소한 것이며 독자에게 맡겨져 있습니다.

공식은 간단한 기하학적 구조에서 나온 것입니다.

전환점 그래프

검은 선은 발사 경로이고가는 검은 선은 터닝 _ 반경 단위로 목표를 향해 이동 한 동일한 경로입니다. 대상 경로 인 빨간색과 동일합니다.

녹색 세그먼트의 길이가 터닝 반경이므로 다음과 같이 표시됩니다.

AB는 90 °-θ °의 탄젠트입니다

기원전은 BC입니다.

전환점에서 나오는 녹색 선의 길이는 모두 터닝 반경이며 두 경로에 수직입니다. 즉, 회전 반경이 정확하고 호가 두 경로 모두에 접합니다 (물리적 구속 조건에서 회전 할 경우와 동일).

오류가 발생하면 알려주십시오.

편집하다:

게시 된 그림은 고정 슈터 및 대상이있는 경우에도 여기에서 볼 수 있듯이 여러 경로를 선택할 수 있음을 보여줍니다.

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

대상을 선택하면 위에서 말한 것을 적절한 각도로 적용 할 수 있습니다.


이것은 지속적인 업데이트 시스템이 아닙니다. 원점 복귀에는 더 많은 CPU (많은)가 필요하기 때문에 고정 된 목표물에 대한 올바른 접근 방식을 고려하거나 "반덤"미사일을 구현해야하는 경우 고려해야합니다. 경로는 3 개의 하위 경로에서 경로를 분할하는 t에 대해 간단히 매개 변수화 될 수 있으며 호는 베 지어 곡선으로 근사화 될 수 있습니다.
FxIII

1

나는 미사일에 대한 "조향 행동"을 구현할 것입니다. 미사일에는 속도 (수), 위치 (벡터) 및 (전류) 회전이 있습니다. 게임에서 / 프레임마다 업데이트 할 때마다 미사일의 회전이 약간 (대상을 향하여) 변경됩니다. 그런 다음 미사일은 현재 회전 및 현재 속도에 따라 앞으로 이동합니다.

유일한 차이점은 추가 치수이기 때문에 2D 및 3D에서 분명히 작동합니다.

또 다른 가능성은 미사일을 발사하기 전에 경로를 계산하는 것입니다. 베 지어 곡선 또는 스플라인을 찾습니다 .


스플라인을 사용할 때의 문제는 대상이 이동하면 제어점을 지속적으로 업데이트해야한다는 것입니다. 여기에서 간단한 스티어링 알고리즘은 계산적으로 저렴할 수 있습니다.
ChrisE

실제로 목표 경로를 미리 계산하려고합니다. 내가 일하고있는 것은 실제 장비의 시뮬레이터이며 실제 장비의 동작을 모방하려고합니다.
Tony

0

여기에서 잘못된 문제를 해결하고 있다고 생각합니다. 실제 미사일은 어디로 돌릴 지 걱정하지 않고, 목표물을 가리킬 때까지 돌리기 만하면됩니다. 실제 미사일이 회전 속도를 즉시 변경할 수 없으므로 컨트롤을 중립으로 가져 오기 시작하는 시점 만 계산하면됩니다. 이 계산은 미사일의 표시된 대기 속도 만 입력 값으로 사용하며 사전 계산 될 것이라고 생각합니다.


2
실제 미사일은 특히 후자의 무기에 관성 유도 시스템이나 GPS 또는 둘 다가있어 검색 영역으로 이동하여 목표를 찾기 시작하도록 프로그래밍됩니다. 친근한 사람이 근처에 있으면 화가납니다. 이 프로그래밍은 친구 나 육상 및 무고한 방관자와 같은 다른 장애물을 피할 수있는 경로로 미사일을 보낼 수 있도록되어 있습니다.
Tony

0

가장 간단한 알고리즘은 두 가지 규칙을 따릅니다.

  1. 현재 목표가 회전 직경보다 미사일에 더 가까운 경우 계속 직진하십시오. 이것은 미사일이 목표물에 근접하지 않고 궤도를 공전하는 것을 방지합니다.

  2. 그렇지 않으면 대상을 가리킬 때까지 대상을 향하십시오.

회전이 2D로 끝나는 지점을 계산하려면

  1. 회전을 시작하려는 지점에서 회전 원의 중심은 회전 반경 거리에서 현재 방향과 직교하는 방향에 있습니다. 그 중 두 가지 점이 있습니다. 아마도 목표에 가장 가까운 점이 필요할 것입니다. 그 위치를 계산하고 P라고 부릅니다.

  2. 이제 접선에서 직각으로 직각 삼각형과 두 개의 알려진 점-P와 대상을 직각 삼각형으로 구성 할 수 있습니다. 피타고라스를 사용하여 탄젠트에서 목표점까지의 거리를 계산할 수 있습니다. 그것을 D라고 부른다.

  3. 이제 대상에서 반경 D의 원과 회전 원의 교차점계산 해야합니다 . 미사일이 회전을 멈출 수있는 원의 2 개의 접선 점인 2 개의 솔루션을 얻을 수 있습니다 (원의 각 이동 방향마다 하나씩). 미사일 앞에있는 점을 선택하십시오 – 그것이 당신의 대답입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.