当前位置: 首页 > 知识库问答 >
问题:

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

阎咏思
2023-03-14

Jason Davies图形着色并没有避免我得到具有相同颜色的邻居多边形。

.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种颜色通常就足够了)

另见:

  • 四色定理

注:标签#四色定理可能是受欢迎的。

共有2个答案

盖晋
2023-03-14

不,没有这样的实施。在我看来,D3也不是实现它的最佳选择,因为它的设计在很大程度上假设数据是独立的。

屠和洽
2023-03-14

你介意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); }); });

你想给特定的地图上色吗?提前设置配色方案可能比编写每个客户机运行的算法更容易。

 类似资料:
  • 我正在使用geoJSON在Android MapBox中显示一个形状。在geoJSON中,我有很多多边形,每个多边形在“属性”JSONObject中都有一个值,下面是一个示例: 我想根据值用特定颜色填充多边形。 我应该怎么做来给形状上色? 在JSON中为“poperties”对象添加一个“fill”值?(还没有为我工作。) 手动解析JSON并在“PolygonOptions”对象中使用“fillC

  • 我有一个使用Mayavi创建的3d图,边缘必须由标量值着色。 以下代码创建图形,但我不确定如何着色边缘 用于着色边缘的标量值 任何关于如何做到这一点的建议都会非常有用。 我还看到了创建的3d图形中的另一个问题。其中一条边未连接到节点。 编辑:据我所知,mlab。管道曲面(管,颜色=edge\u color) 用于为边缘/管着色。 更新代码: 但问题是我无法为不同的边/管指定不同的颜色

  • 我一直在尝试编写一个代码,将使用四色定理对邻接矩阵定义的区域进行着色。邻接矩阵如下所示: 因此对于这个例子A本身或C不相邻,但它与B和D相邻。 我正在编写的程序必须使用递归和回溯来为定义的区域指定4种颜色(或更少)。 到目前为止我的算法如下: 但我有几个问题: 这个方法会返回什么? 这是否可行,是否应该有递归/回溯? 如果给定的行/列超出边界,我将输出什么? 谢谢你!

  • 我似乎无法理解从顶点到像素的OpenGL管道过程。 有人能告诉我顶点法线在这两种着色技术中有多重要吗?据我所知,在gouraud中,在每个顶点计算照明,然后在顶点之间的多边形上插值结果颜色(在光栅化之前,这是在片段操作中完成的吗?),phong着色包括首先插值顶点法线,然后计算每个法线上的照明。 另一件事是,当凹凸贴图应用于一个平面(2个三角形)和一个砖纹理作为漫反射时,使用其相应的凹凸贴图,所有

  • 我正在做一个minecraft-ish游戏,我在vbos上做了更多的工作。然而在一个vbo中绘制多个面时,我似乎有点问题。 以下是我的vbo生成代码: 下面是我用来绘制vbo的代码: 这是我想要的结果(在每个vbo中使用一个四边形): 不幸的是,我还是新来的,所以你必须点击这个链接:/ 下面是我在每个vbo中使用多个四边形得到的结果: 形象 那么为什么我要在一个vbo中绘制多个四边形呢?一个词:性