2016-08-26 5 views
0

C#에서 Bing Maps WPF Control을 사용하여 미국 전역에서 다양한 판매원이 커버하는 지역을 그립니다. 지역을 잘 그릴 수 있고 function similar to this one을 무작위로 선택하여 System.Drawing.KnownColor의 색상을 선택하면 모두 정상적으로 작동합니다.Bing Maps WPF 컨트롤 영역에 대해 색상을 임의로 선택하는 데 도움이 필요합니다.

이 문제는 무작위로 서로 닿아있는 영역이 매우 가깝습니다 (즉, 영역 1은 경계 2로, 영역 1은 보라색이고 영역 2는 매끄럽게 처리됩니다.) - 보라색이 약간 짙어서 함께 피를 흘리며).

색상 값이 상당히 다른지 확인하기 위해 서로 만나는 지역에서 할 수있는 RGB 수학이 있습니까? 또한 특정 음영을 모두 제외시키는 방법이 있습니까 (예 :지도의 배경이 흰색이므로 흰색의 모든 음영은 아마도 unpickable이어야합니다)?

+0

총 몇 개의 지역을 만들 가능성이 있습니까? –

+0

당신이 들어가고있는 문제 중 하나는 당신의 지역이 우편, 카운티, 주 등지에 달려 있다는 것입니다. 그들은 모두 서로에 의존하게 될 것입니다. 예 : 오레곤이 캘리포니아와 밀접하게 접해 있기 때문에 오레곤의 색을 바꾸면 색이 바뀌는 워싱턴과 가까울 수 있습니다. 그래서 x 변경 y의 문제를 만들지 만 z는 계산하지 않습니다. 그래서 본질적으로 충돌하는 모든 객체를 차별화 할 필요가 있습니다. 아이디어는 북쪽에서 남쪽으로 또는 서쪽에서 동쪽으로 갈 수 있습니다. 그리고 벡터가 변경되면 약간 변화하는 그라디언트를 만들 수 있습니다. – djangojazz

+0

@FirstStep 바로 지금 22 명이 있습니다. 사람들이 고용되고 해고됨에 따라 어느 한 방향 또는 두 방향으로 변동될 것입니다. – Hershizer33

답변

0

지역의 크기/수에 상관없이 네 가지 색상 만 사용하면 The Four Colors Theorem이라고 할 수 있습니다. 당신이 그것의 강한 이해를 얻을 경우 구현하기 쉽습니다. 하지만 온라인으로 제공되는 코드는 Graph Colouring With Simple Backtracking과 같이 찾을 수 있습니다. 다른 온라인 코드와 마찬가지로 문제를 해결하기 위해 조정이 필요합니다.

또한 Graph Coloring의 이론을 살펴보고 싶습니다.

또한이 생각할 수 : 충돌이 발생했을 때

  • 가 왜 (최종 사용자)가 수동으로 다른 색상을 선택하지?

  • 작은 색 델타가있는 "/ 모든"두 연결된 경계선을 찾은 다음 GenerateRandomColor()을 다시 호출하여 새 색을 선택하도록 프로그래밍하십시오. 모든 요구 사항에 도달 할 때까지 알고리즘이 계속 수행하도록하십시오 (모든 색상이 다름 = 모든 색상 '델타'가 임계 값보다 높음)

  • 모든 색상이 선택 될 때, 예를 들어 [+ x, -x]와 그 색상을 포함하여 더 이상 선택해서는 안됩니다.

힌트 : 숫자로 색상을 치료 (무지개처럼 뭔가 -> 0 ~ 1000), 다음 사용하여 색상을 만드는 것이 INT/진수 등등).

개인적으로이 문제는 복잡하지 않고 좋은 디자인이 아니며 가치가 없기 때문에 개인적으로이 모든 무작위적인 문제를 제거합니다. RGB 값으로 30 가지 색상의 작은 텍스트 파일을 준비합니다. 애플리케이션로드시로드하여 각 직원에게 다른 색상을 지정하는 데 사용하십시오. 30 개가 넘으면 텍스트 파일을 수정하고 더 많은 색상을 추가합니다.

+0

이것은 훌륭하지만 사용자 요구 사항에 맞는지 확실하지 않습니다. 그들은 Bob이 Green이라는 것을 알고 싶습니다.지도에서 Bob을 쉽게 찾을 수 있습니다. 만약 하나 이상의 녹색이 있다면 혼란을 겪을 수 있습니다. 4 색 정리의 결과가 녹색이 아닌 다른 녹색을 만들지 않는 한? – Hershizer33

+0

@ Hershizer33 편집보기 참조. –

+0

고마워요! 색상 범위 내에서 +/- x가 있는지 확인하는 가장 좋은 방법은 무엇이라고 생각합니까? 색상이 너무 많지 않습니다. RGB 값이 64 이상 떨어져 있기를 원한다고 가정 해 봅시다. 세 개 (R, G, B) 모두> 64인지, 아니면 하나 또는 그 합을 검사할까요? – Hershizer33