1

지도가 있으며 많은 마커가 표시됩니다. 때로는 마커가 서로 겹쳐서 서로 가깝습니다. 이 문제를 해결하기 위해이 상황을 해결하기 위해 spiderfier 라이브러리를 구현했습니다.최소한의 선 교차로 마커를 반원으로 변환하는 방법은 무엇입니까?

아이디어는 서로 교차하지 않는 방식으로 화면에서 위쪽으로 (수학적으로 아래쪽으로) 가까이있는 마커를 그룹화하는 것입니다.

마커는 직사각형으로 표시됩니다.

구현 :

  • 단지 큰만큼 각-다른 ((되어 minX + 맥스)/2 MAXY) 및 반경의 중심과의 그룹에 포함되는 교차 마커와 마커 횡단
  • 서로 교차하는 반원이있는 반면, 더 큰 반원으로 합쳐집니다.
  • 우리는 비교 자로 마커를 정렬하고, 더 작은 "원주의 왼쪽에있는 마커는"더 큰 "상대에 비해
  • 우리는 최상위 반 원에 마커를 표시하지만, 우리는 너무 좋아, 지금까지 자신의 실제 위치

자신의 수정 위치에서 선을 표시합니다.

문제 :이 선들은 서로 너무 자주 교차하며 마커 선 교차 수가 최소화되는 비교 함수가 필요합니다.

시도한다

  1. <을 P1.x = P2.x => P1 = P2 <

  2. 아크 탄젠트 ((P1.y - 싸이)/(R * (을 P1.x - CX))) < = 아크 탄젠트 ((P2.y - 싸이)/(R *의 (P2.x - CX))) => P1 = P2 <

I 높은 희망 번째 시도 묶고 , 그러나 나는 그것이 좋지 않다는 것을 인정해야만했다. 실제 위치와 원 중심 사이의 직선이 항상 동일 선상에 있지 않기 때문에 실제 위치가 서로 매우 가까운 마커가 많으면 각도가 상당히 커질 수 있습니다. 이 하위 지역을 제외한 반원의 표면은 상당히 불모의 땅입니다. 그래서, 이것은 교차로로 이어지고 그것은 첫 번째 시도보다 훨씬 더 복잡합니다. Javascript의 Math.atanTaylor series 또는 Fourier series 중 하나로 구현되며 이는 첫 번째 사례의 파생물과 두 번째 사례의 적분을 포함합니다. 또는 매우 복잡한 세 번째 방법이있을 수도 있습니다. 이 두 번째 접근 방식이 교차 수를 크게 줄이면 최적화와 같은 것을 생각할 것입니다.하지만 개선이 거의 보이지 않기 때문에 첫 번째 접근법으로 돌아 왔습니다.나는 다음과 같은 접근 방식에 대해 생각하고

:

  • 가 충돌하는 그룹을 찾아 자신의 가장 가까운 가능한 슬롯
  • 모든 마커를 번역하는 주변
  • 시도에서 마커 슬롯의 위치를 ​​계산하고 최적의 것을 찾음으로써 모든 갈등을 풀어 라. 가장 작은 총 번역을 가진 번역 세트 인 것

이 생각은 상태가 s pider line 교차 수는 최소화되고, 그렇지 않은 경우, 어떻게 그러한 교차점의 수를 최소화 할 수 있습니까?

답변

1

이것은 어려운 문제이며, 오랫동안 연구되었습니다. 가끔은 automatic label placement이라고합니다. 아래에 인용 된 연구는 문헌에서 일반적으로 제공되는 것입니다.


USmap


반 Kreveld, 마크, 티코 Strijk, 알렉산더 울프 . "슬라이딩 레이블을 사용하여 레이블 설정을 지정하십시오." 전산 기하학에 관한 제 14 회 연례 심포지엄 논문집. ACM, 1998. ACM link.

+0

설명과 출처에 대해 Joseph에게 감사드립니다. –