나는 우주가 극도로 커질 수있는 (기본적으로 무한히 커지는) 웹 사이트를위한 2D 게임을 만들고 있습니다. 처음에 우주는 원점 (0, 0)과 같은 거리에있는 별 6 개로 구성됩니다. 내 임무는 서로 연결되는 "경로"(가장자리)가있는 더 많은 별을 생성하는 것입니다. 이러한 제한을 충족하는 알고리즘을 어떻게 디자인 할 수 있습니까?
- 별은 무작위로 바깥쪽으로 생성됩니다. (예를 들어, 새 별에 대한 (x, y) 좌표는 모든 방향으로, 바람직하게는 나선 형식으로 (0, 0)에서 천천히 바깥쪽으로 이동합니다)
- 가장자리가 교차하지 않습니다.
- 약간의 차이가 있어야하지만 새로운 별은 다른 별과 너무 멀거나 너무 멀어서는 안됩니다. (예 : 최소 반경이 있어야합니다)
- 별표 / 점의 배수는 3보다 크지 않아야합니다.
- 이 모든 것이 데이터베이스에 저장된다는 것을 감안할 때, 알고리즘은 너무 비쌀 수 없습니다. 즉, 나는 O (n) 복잡성의 무언가를 달성하고 싶습니다 (이것이 실현 가능한지 모르겠습니다).
본질적으로, 제가하고자하는 것은 별이 그래프의 점이고 별들 사이의 이동이 그 별들 사이의 가장자리로 묘사되어있는 나선형으로 보이는 은하입니다.
해결해야 할 특정 단계는 다음과 같습니다.
- 아직 3의 배수를 가지지 않은 다른 별들의 주변 부근에 점을 무작위로 생성하십시오.
- 가장자리 충돌을 일으키지 않는 다중도 3을 아직 갖지 않은 첫 번째 별을 찾으십시오.
- 별이 x 단위의 최소 거리 인 경우 두 점 사이에 모서리를 만듭니다.
나는 해결책을 찾았지만 수학 기술 (그래프 이론에 대한 지식)에는 많은 노력이 필요합니다. 또한이 문제에 대한 모든 리소스 / 링크는 대단히 감사하겠습니다.
여기에 내가 생각했던 의사 코드가 있지만 이것이 작동하는지 확실하지 않으며 몇 10,000 등의 별 후에는 제대로 수행되지 않을 것이라고 확신합니다.
newStar = randomly generated (x, y) within radius of last star from origin
while(newStar has not been connected):
for (star in the known universe):
if(distance between newStar and star > x units):
if(star has < 3 multiplicity):
if(path from newStar to star does not intersect another path):
connect the star to the other star
break;
newStar = new random (x, y) coordinate
또한 누군가 MySQL 데이터베이스에 저장하는 방법에 대한 조언이 있다면 감사하겠습니다.