D3js中的四色定理用于邻域多边形着色?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了D3js中的四色定理用于邻域多边形着色?相关的知识,希望对你有一定的参考价值。

杰森戴维斯图形着色并没有避免我得到相同颜色的邻居多边形。

.style("fill", function(d, i) { return color(d.color = d3.max(neighbors[i], function(n) { return countries[n].color; }) + 1 | 0); });

四色定理:

我们知道 :

四色图定理表明,如果将平面分离成连续区域,产生称为地图的图形,则需要不超过四种颜色来着色地图的区域,使得没有两个相邻区域具有相同的颜色。 (维基百科)

和:

其次,出于定理的目的,每个“国家”必须是一个简单连接的区域,或者是连续的。 [...]因为[非连续国家]的领土必须是相同的颜色,四种颜色可能是不够的。 (维基百科)

仍然,#D3js有没有四种颜色定理类似的实现/功能,所以我们得到了不同颜色的邻居多边形? (所以我们不会使用20种颜色,因为4-6通常就足够了)

也可以看看:

注意:标签#four-color-theorem可能是受欢迎的。

答案

你介意8种颜色吗?减少可能的颜色数量非​​常简单:

color.range(color.range().slice(0, 8));

http://bl.ocks.org/1wheel/5899035

7种颜色导致一些相邻的国家共享边界。

在着色之前,我还尝试按邻居数量对国家进行分类; 7种颜色仍然不起作用:

var permutation = d3.range(neighbors.length).sort(function(i, j){ 
  return neighbors[j].length - neighbors[i].length; });

countries = d3.permute(countries, permutation);
neighbors = d3.permute(neighbors, permutation)
              .map(function(array){ 
                return array.map(function(d){ 
                  return permutation.indexOf(d); }); });

你想为特定的地图上色吗?提前设置颜色方案可能更容易,而不是尝试编写每个客户端运行的算法。

另一答案

不,没有这样的实施。在我看来,D3不是最好的实现它,因为它的设计主要假设数据是独立的。

以上是关于D3js中的四色定理用于邻域多边形着色?的主要内容,如果未能解决你的问题,请参考以下文章

片段着色器究竟如何用于纹理?

片段着色器中未使用纹理数据 - OpenGL

Echarts-百度地图省分着色

从片段着色器中的地形高程数据计算法线

在GLSL ES中的片段着色器上旋转纹理

纹理中的 OpenGL 片段着色器