【问题标题】:Need help randomly pick colors for Bing Maps WPF Control regions需要帮助为 Bing 地图 WPF 控制区域随机选择颜色
【发布时间】:2017-01-03 08:43:09
【问题描述】:

我在 C# 中使用 Bing Maps WPF Control 来绘制美国各地的一些销售人员覆盖的区域。我可以很好地绘制区域,我使用function similar to this oneSystem.Drawing.KnownColor 中随机选择一种颜色,一切正常。

我遇到的这个问题是因为它是随机的,你会得到很多在相互接触的区域上非常接近的颜色(即区域 1 与 2 接壤,区域 1 是紫色,区域 2 是这样-略深的紫色,因此它们最终会一起流血)。

我可以对相互接触的区域进行一些 RGB 数学运算,以确保颜色值显着不同吗?另外,有没有办法完全排除某些阴影(例如:地图的背景是白色的,所以所有的白色阴影都应该是不可选择的)?

【问题讨论】:

  • 您最终可能会获得多少个区域?
  • 您遇到的问题之一是取决于您所在的地区是否是邮编、县、州等。它们是否都将相互依赖。 EG:如果我改变俄勒冈州的颜色,因为它靠近加利福尼亚并且它改变了,那么它可能靠近华盛顿,而华盛顿的颜色则接近。因此,您随后创建了 x 更改 y 但不依赖 z 的问题,因此您本质上需要区分所有碰撞的对象是不同的。一个想法可能是从北到南或从东到西等。并创建一个随着矢量变化而略有变化的渐变。
  • @FirstStep 现在有 22 个,随着人们被雇用和解雇,它会在一个或两个方向上波动。
  • 发生冲突时为什么不自己选择颜色?
  • @FirstStep 好吧,我希望它是自动化的,这样我就不必在每次有新员工时都摆弄它。

标签: c# wpf colors bing-maps


【解决方案1】:

无论您的区域的大小/数量如何,您都可以只使用四种颜色来做到这一点,它被称为The Four Colors Theorem。如果你对它有深入的了解,它很容易实现。但是您可以找到已经在线提供的代码,例如: Graph Colouring With Simple Backtracking。这与任何其他在线代码一样,需要进行一些调整才能解决您的问题。

另外,你想看看Graph Coloring背后的理论。

我也能想到这些:

  • 发生冲突时,您(最终用户)为什么不手动选择另一种颜色?

  • 对其进行编程以查找“the / any”两个连接的边界之间具有小颜色增量的边界,然后再次调用GenerateRandomColor() 以选择新颜色。让算法一直这样做,直到达到所有要求(所有颜色不同 = 所有颜色的 delta 都高于阈值)

  • 在选择的每个颜色上,确保不再选择该颜色周围的某个范围 [+x, -x],包括该颜色。

提示:将您的颜色视为数字(例如彩虹 -> 0 到 1000),然后使用该 int / hex .. 等创建颜色。

就我个人而言,我会摆脱这整个随机性的东西,因为问题并不复杂,它不是一个好的设计,因为它不值得。我会准备一个小文本文件,其中包含 30 种不同颜色的 RGB 值。在应用程序加载时加载它并使用它为每个员工分配不同的颜色。一旦超过 30 个,我将修改该文本文件并添加更多颜色。

【讨论】:

  • 这很好,但我不确定它是否完全符合用户要求。他们想知道 Bob 是绿色的,所以很容易在地图上找到 Bob,如果有多个绿色,他们可能会感到困惑,除非可能使由四色定理产生的其他绿色具有不同深浅的绿色?跨度>
  • 谢谢!您认为检查其 +/-x 是否在颜色范围内的最佳方法是什么?不太讲究颜色。假设我希望 RGB 值相隔 > 64,我会检查所有三个(R、G 和 B)的 > 64 还是只检查一个或它们的总和?
  • 我只想摆脱这整个随机性的东西,因为问题并不复杂,它不是一个好的设计,因为它不值得。我会准备一个小文本文件,其中包含 30 种不同颜色的 RGB 值。在应用程序加载时加载它并使用它为每个员工分配不同的颜色。一旦它们超过 30 个,我将修改该文本文件并添加更多颜色。
  • 可是我的懒惰!是的,我知道你是对的......只是认为这可能是一个尝试解决的有趣问题,但时间投入可能不值得。
猜你喜欢
  • 1970-01-01
  • 2016-06-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多