내비게이션 메시에서 "시선"경로


9

탐색 메쉬에서 시선을 계산하고 싶습니다.

아래 이미지를 고려하면, 노란색 선은 A *의 결과이고 빨간색 선은 입력으로 노란색 선을 사용하는 가시선 "알고리즘의 결과입니다. 이제 장치는"지그재그 "없이 직접 이동할 수 있습니다.

"시선"을 계산하는 알고리즘은 무엇입니까?

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

답변:


6

깔때기 알고리즘을 찾고 있습니다.

여기 당신은 간단한 것입니다

http://digestingduck.blogspot.com.es/2010/03/simple-stupid-funnel-algorithm.html

기본적으로 알고리즘은 가장자리를 포털로 식별하고 가장자리의 정점에 대해 테스트되는 깔때기를 만들어 깔때기 내부에 있는지 여부를 확인합니다.

단계 A에서 깔때기는 시작 위치와 포털이 노란색 선으로 교차하여 구축됩니다.

B 단계에서 다음 포털이 확인되고 상단 정점이 깔때기 내부에 있으므로 깔때기 상단이 통과합니다. 그러나 녹색 선 아래에 빨간색 선이 있으므로 하단 정점이 깔때기에서 벗어납니다. 따라서 하단 선은 통과하지 않고 이전 포털의 하단 정점을 계속 통과합니다.

확인할 수 있듯이 깔때기가 더 작고 작아지는 단계 F까지 깔때기를 만들 수없는 곳에서 빨간색 선이 잘못된 깔때기를 만들기 때문에 상단 정점이 새로운 시작점으로 선택되고 새 깔때기가 엔드 포인트가 해당 메시에없는 경우 빌드합니다.

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

이러한 종류의 알고리즘을 사용하면 모델 크기 문제에 대한 간단한 솔루션도 가능합니다. 모델의 2 배 반경에 의해 포털이 더 작다는 것을 고려할 수 있기 때문입니다.

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


6

이 가시선 아이디어를 사용하여 생성 된 경로와 함께 사용할 수있는 간단한 기술이 있습니다. 기본적으로, 당신은 길을 걷고 싶어하며, 각 노드에서, 마지막 노드보다 두 개의 노드가 "돌아가서" 보이는지 확인합니다. 마지막 이전 노드가 표시되면 마지막 노드를 제거 할 수 있습니다 (현재 노드와 마지막 이전 노드 사이에 가시선이 있기 때문에 중간 노드 인 마지막 노드는 필요하지 않습니다).

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

Gamasutra 기사 에는 다음과 같은 의사 코드 예제가 있습니다.

checkPoint = starting point of path
currentPoint = next point in path
while (currentPoint->next != NULL)
if Walkable(checkPoint, currentPoint->next)
// Make a straight path between those points:
temp = currentPoint
currentPoint = currentPoint->next
delete temp from the path
else
checkPoint = currentPoint
currentPoint = currentPoint->next

이 알고리즘은 원하는대로 Walkable기능이 기본적으로 가시선 기능이지만 경로가 보이지만 걸을 수없는 상황 (예 : 구덩이, 함정, 제한 구역)도 포함하도록 약간 개선되었습니다.


나는 당신이 말하는 것을 이해하지만, 여전히 시선을 계산하는 방법을 모르겠습니다. 삼각형 내비게이션 메시를 사용하여 Walkable 기능에 무엇이 있는지 설명 할 수 있습니까?
Yannick Lange

이 답변은 그리드 기반 경로에 대한 것이며 내비게이션 메시 시나리오에서는 쓸모가 없습니다
Blau
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.