2D 그리드 맵에서 도로 / 강 생성


12

이것은 초보자 질문이지만 여기에 있습니다.

내지도는 2 차원 격자이며 도로와 강을 생성하고 싶습니다. 시작점에서 끝점까지의 경로는 타일 수에서 최적의 경로가 아니어야합니다. 대신, 그들은 일정 수준의 무작위성 (턴)을 가져야합니다.

이런 종류의 표준 알고리즘이 있습니까?

건배!

최신 정보:

이는 그리드에서 가중치를 사용하고 jgrapht 라이브러리를 사용하여 최단 경로 알고리즘 (Bellman-Ford)을 적용한 결과입니다. 나는 결국 도넛츠의 대답과 함께 갔다.

http://pastebin.com/AGQGK5ik


지도에 장애물이 있습니까?
MichaelHouse

아직은 강이 가장 먼저 놓이게 될 것입니다.
Markos Fragkakis 2016 년

답변:


18

A *를 사용하여 최적의 경로를 생성 한 다음 중간 점 변위로 왜곡 할 수 있습니다.

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

이를 통해 엔드 포인트가 충족되고 임의성을 어느 정도 제어 할 수 있습니다. 예를 들어, 나는 강만큼 도로를 무작위 화하지 않을 것입니다. 인텔리전스가 도로를 구축하는 것이 무엇이든간에 일반적으로 도로를 최적화하려고 시도합니다.

맵에 장애물이있는 경우 반복 할 때마다 해당 장애물을 통과하지 않는지 확인하십시오.

다른 방법은 최적의 경로를 찾은 후 Perlin 노이즈 를 생성 한 다음 생성 된 노이즈를 기준으로 포인트를 이동하는 것입니다. 예를 들어,이 노이즈를 사용하면 :

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

그런 다음 최적의 경로를 빨간색으로 표시하고 이동 한 경로를 파란색으로 표시하십시오.

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

이동 된 경로가 노이즈의 어두운 영역에 어떻게 "정착"되었는지 확인하십시오. 강이 계곡을 흐르는 것과 같은 방법입니다.

Perlin 노이즈 선택의 한 가지 장점은 장애물을 고려하여 알고리즘의 일부로 피할 수 있다는 것입니다.


1
이 점을 잡음에 기초하여 어떻게 이동합니까?
Khoi

1
노이즈 및 생성 된 라인을 저장하는 방법에 따라 다릅니다. 먼저 중심에서 선에 수직으로 가장 가까운 / 가장 낮은 노이즈를 찾은 다음 중심과 끝 사이의 중간 지점에서 찾을 수 있습니다.
MichaelHouse

3

A * 알고리즘을 사용하면 타일에 적합성을 나타내는 값을 할당 할 수도 있습니다. 예를 들어, 최저 비용 점수를 강의 낮은 토지, 도로의 평지 (늪은 아니지만)에 할당하고이를 기반으로 생성 할 수 있습니다. 이것은 가장 짧은 경로를 제공하지는 않지만 가장 효율적인 경로를 제공합니다. 타일 ​​값에 약간의 임의성을 적용하면 차선의 경로를 얻을 수 있습니다.


2

높이가 중요한 경우는 어떻습니까? 다이아몬드 사각형 알고리즘으로 하이트 맵을 만들 수 있습니다. 나는 각 타일에 임의의 물을 추가 한 다음 물이 완전히 정착 될 때까지 물을 반복하여 더 낮은 고도로 이동시키는 것을 생각하고 있었지만 속도가 느려지고 강이 아닌 호수를 만들 것입니다.

나는 또한 각 타일에 대한 법선을보고 생각했습니다. 2 개의 법선이 서로를 향하고 있다면, 그것은 계곡이어야합니다. 계곡에 물이 모일 것입니다. 그들이 같은 방향을 가리 키거나 서로 떨어져 있으면 물이 모이지 않습니다. 이것은 아마도 반복 방법보다 빠를 것이지만 호수를 만들지 않고 강만 만들 수도 있습니다. 타일의 모든 인스턴스가 서로를 향한 강을 향하지 않도록하기 위해 그것을 가지고 놀아야했습니다.


각 타일에 가중치를 추가 할 수있는 문서 중 하나를 읽었으며 특정 타일은 단순히 통과 할 수 없습니다.
Joe Plante
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.