2011-05-10 6 views
4

저는 Flash에서 Box2D를 사용하여 간단한 배구 게임을 구현하고 있습니다. CPU 플레이어 용 AI를 구현해야합니다. 잭이라고 불러 봅시다. 그래서 잭은 인간 선수 인 요한에게 타격을 가한 후 공이 어디로 떨어질 지 예측해야합니다. 존 그것을 칠 때공의 경로 예측 - 인공 지능

  1. 초기 선형 속도 (모두 X & y 방향) 볼 : 나는 다음과 같은 정보가 있습니다.
  2. 공이 존 안타를 때릴 때의 초기 위치. (x & y 좌표 값)
  3. 중력 값입니다.
  4. 공이 떨어지는 바닥의 y 위치 값.
  5. 존이 볼을 치는 각도.
  6. 볼은 발사체 탄도를 따릅니다.

그래서 잭은 바닥을 칠 때 볼의 위치 (x 값을) 어떻게 될지 예측할 필요가있다.

공이 발사체 궤도를 따라 가면 문제는 알려진 초기 위치에서 캐논 볼을 발사하고, 고정 중력으로 알려진 초기 속도와 착륙 지점을 예측하는 것과 같습니다. 착지 지점의 y 값은 또한 알려져있다. 공기 저항은 0입니다.

착륙 지점의 x 값을 예측하는 데 도움이되는 수학적 방정식이 있습니까? 나는 몇몇 발사체 방정식을 살펴 보았지만, 대부분은 '시간'을 변수로 사용했다. 이 '시간'변수를 포함하지 않는 솔루션이 필요합니다. 이 문제에 대한 어떤 종류의 해결 방법도 인정 될 것입니다. 고맙습니다! : 당신이 t의 측면에서 z (즉, 높이)에 대한 방정식이있는 경우

+1

이것은 외부 탄도와 마찬가지로 인공 지능이 아닙니다. 나는 인공 지능이 나중에 온다고 가정한다. –

+2

배구 경기가 어쨌든 공의 움직임을 시뮬레이션하지 않아도 되나요? 왜 AI 부분에서 같은 것을 사용하지 않습니까? 사실, 궤적을 한 번 미리 계산하고 시간 진화와 인공 지능 행동 모두에 사용하는 것이 완벽하다고 저는 생각합니다. 아마 잭의 플레이 품질을 조정할 수있는 무작위 에러를 추가하여 AI의 궤도를 악화시킬 수 있습니까? 첫 번째 지상 접촉 지점을 찾는 것은 궤적에 대한 후 처리 단계 일뿐입니다. –

+0

@David - 네, 그렇게 말할 수 있습니다! 그러나 '게임 개발을위한 인공 지능'에 관한 대부분의 책에는 발사체 궤적을 예측하는 주제가 포함되어 있습니다. :) @Tilman - 사실, 저는이 모든 수학적 요소를 처리하는 공의 움직임과 충돌을 시뮬레이션하기 위해 Box2D를 사용하고 있습니다. 그래서 저는이 사실을 알기 전까지는 그것을 사용할 수 없습니다. 나는 당신의 제안에 감사하지만 나는 방정식을 모른다면 첫 번째 위치에서 궤도 운동을 미리 계산할 수 없을 것 같습니다. –

답변

2

는, 당신은 t 때 볼 토지의 가치를 얻을 수 z = 0에 대한 것을 해결해야합니다. 그런 다음이를 다시 xy에 대한 방정식으로 공급할 수 있습니다.

+0

좀 더 자세히 설명해 주시겠습니까? 나는 아직도 그것을 얻지 않는다. 나는 수학에서 약간 약하다. 불편을 드려 죄송합니다. –

+0

@Anubhav : 당신은't'의 방정식을 가지고 있다고 말합니까? 'f1','f2','f3'는 몇 가지 함수로'x = f1 (t)','y = f2 (t)','z = f3 (t)'입니까? 그렇다면 공이 땅에 떨어졌을 때 't'라는 시간을 찾아야합니다. 'z' 방정식을 풀면됩니다. 그러나이 시간에는'x'와'y'라는 특별한 값이있을 것입니다.이 값은 처음 두 개의 방정식에 다시 그 숫자를 다시 넣음으로써 찾을 수 있습니다. –

1

이 방정식을 사용하여 z (x) = 0을 풀어야합니다. g는 중력, v0는 x 축의 초기 속도, a는 각입니다. 당신이 그것을 해결하면

Equation of z with x variable

, 그것은 (히트 방향에 따라 하나의 종단점 선택) 시작 지점과 끝 지점을 연결하는 세그먼트의 길이를 제공합니다. 당신이 3D에 있다면

Resolution

, 당신은 문제의 3D 부분을 제거하는 몇 가지 예측을해야하고, 두 축하겠습니다.

+0

재미 있습니다.구현하고 결과를 확인하겠습니다. 도와 주셔서 감사합니다. –

+0

중간 단계로 착륙 시간을 풀면 더 간단합니다. 각도를 뒤적 거리지 않고 주어진 속도를 사용하십시오. – Beta

0

초기 선 속도 (모두 X &에 방향 y)를 볼 때 요한은 그것을 안타.

존이 안타를 때 공의 초기 위치.(x & y 좌표 값)

중력 값입니다.

물론 방향이 음의 y 방향입니다. 32.2 ft/sec^2 = 9.8 m/sec^2, 맞습니까?

바닥의 y 위치 값은 어디로 떨어질까요?

다른 플레이어가 터치하지 않으면 y = 0에 도달합니다.

존이 공을 치는 각도.

존이 공과 시간에 적용하는 힘에 대해 말하는 것이 더 좋을 것이라고 생각합니다.

궤도는 탄도탄 을 따른다.

아니요, 그런 건 없습니다. 이것이 당신이 풀려고하는 것입니다.

당신이 가진 것은 뉴턴의 법칙입니다 : F = ma, 여기서 force는 공에 가해지는 힘의 벡터, m은 공의 질량, a는 공에 적용되는 가속도 벡터입니다.

물론 공은 음의 y 방향으로 중력에 의해 가속되지만, 공을 쳤을 때 플레이어가 적용하는 힘 벡터를 잊어 버리는 것입니다.

일단 이것을 사용하면 결합 된 ODE 두 개를 정시에 해결할 수 있습니다.

관련 문제