장애물 이동 / 피하기


12

장애물 (빨간색)을 놓을 수있는 "게임"을 작성하고 나서 검은 점이 그것을 피하려고 시도하고 녹색 목표에 도달하려고합니다.
나는 그것을 피하기 위해 매우 쉬운 방법을 사용하고 있습니다. 검은 점이 빨간색에 가까워지면 방향이 바뀌고 잠시 움직 인 다음 녹색 점으로 이동합니다.
"비현실적인"경로

컴퓨터로 제어되는 "플레이어"에 대한 "평활 한"경로를 만들려면 어떻게해야합니까?
편집 : 매끄러움이 주요 포인트는 아니지만 빨간색 차단 "벽" 피하고 충돌 하지 않도록하십시오.

기본적으로 3 포인트가있는 경우 경로 찾기 알고리즘을 어떻게 구현할 수 있습니까?
(그리고 여러 장애물을 놓을 수 있다면 무엇이 더 복잡해 집니까?)
부드러운 경로

답변:


9

매우 일반적이고 일반적인 접근 방식은 월드 공간을 그리드로 나누고 A *와 같은 알고리즘을 사용하는 것입니다.

링크를 통해 A * 알고리즘을 이해하고 구현할 수있었습니다.

편집 :

내 마음에 오는 더 간단한 생각은 ... 당신이 세상을 그리드 셀에 넣었다는 것입니다. 항상 검은 점이 맨해튼 거리를 따라 녹색 점까지 오도록하십시오. 그런 다음 각 셀에 가중치를 지정할 수 있습니다. 장애물은 그리드 셀에서 높은 무게를 가질 수 있으며 이동하기 쉬운 무게는 0이 될 수 있습니다. 맨해튼 거리를 따라 이동할 때마다 각 이동에 대해 다음 셀의 무게가 현재 셀의 무게보다 높지 않은지 확인하십시오. 더 높으면 인접한 셀의 무게를 확인한 다음 계속하십시오.

도움이 되었기를 바랍니다


이 A * 알고리즘 기사는 내가 찾던 것 같지만 불행히도 여전히 모르는 것은 "세계"를 그리드로 나누는 방법입니다. : S
user

정말 달려 있습니다. 생각 : 당신의 세계를 32 x 32의 격자로 나눈 다음 2D 배열의 위치를 ​​나타냅니다. 예를 들어, 귀하의 경우 : 빨간색 점은 120, 120 픽셀 (또는 120/32 x 120/32 : 3.75 x 3.75)입니다. 3.75 x 3.75는 월드 그리드 (또는 2D 배열)의 위치를 ​​나타냅니다. 배열은 정수로 색인화되므로 정수 부분 만 원합니다. 따라서, 빨간 점은 3 x 3에있을 것입니다. 이것이 도움이
되기를 바랍니다

18

조향 동작은이 정확한 문제 세트를 위해 설계되었습니다.

http://www.red3d.com/cwr/steer/

기본적으로 장애물 회피 동작과 탐색 또는 추적 동작을 결합 할 수 있습니다. 이 페이지에는 다양한 동작과 그 동작에 대한 많은 Java 애니메이션이 있습니다. 스티어링 동작에 대한 몇 가지 오픈 소스 구현이 있습니다. 여기 하나 있습니다.


스티어링 행동은 이것에 완벽합니다.
tenpn

2

시도하기 쉬운 것은 검은 점보다 먼저 보이지 않고 첫 번째 이미지에서 경로를 실행하는 보이지 않는 점을 갖는 것입니다. 그런 다음 검은 점이 조금 뒤에 보이지 않는 점을 따릅니다.
나는이 결과가 좋은 결과를 보았지만 물론 당신의 요구를 충족시키지 못할 수도 있습니다.

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