- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我正在尝试在力布局中的所有组上绘制凸包。但我只画了一半的凸包。当 D3 尝试绘制其余的外壳时,控制台返回错误:尚未创建元素。然而,当我检查控制台中的“组”变量时,所有组数据都在那里,x、y 数据都设置得很好。见下图:
我什至尝试在 tick 函数中延迟绘制船体,但它仍然不起作用,我得到了相同的结果(如下图所示)。
JSFiddle: Only getting half the no. of convex hulls I want
代码如下:
<script>
var radius = 5.5;
var color = d3.scaleOrdinal(d3.schemeCategory20b);
var scale = d3.scaleLinear()
.domain([0.5, 1])
.range([1.8, 3.8]);
var svg2 = d3.select("#svg2");
var w = +svg2.attr("width"),
h = +svg2.attr("height");
var hull = svg2.append("path")
.attr("class", "hull");
var groupPath = function(d) { return "M" + d3.polygonHull(d.values.map(function(i) { return [i.x, i.y]; }))
.join("L") + "Z"; };
function ticked() {
link
.attr("x1", function (d) {
return d.source.x;
})
.attr("y1", function (d) {
return d.source.y;
})
.attr("x2", function (d) {
return d.target.x;
})
.attr("y2", function (d) {
return d.target.y;
});
fnode
.attr("cx", function (d) {
return d.x = Math.max(radius, Math.min(w - radius, d.x));
})
.attr("cy", function (d) {
return d.y = Math.max(radius, Math.min(h - radius, d.y));
})
.attr("r", radius);
delayHull(6000);
}
function delayHull(delay) {
setTimeout(function() {
svg2.selectAll("path")
.data(groups)
.attr("d", groupPath)
.enter()
.append("path")
.attr("class", "hull")
.attr("d", groupPath);
}, delay);
}
var simulation, link, fnode, groups;
var fnodeg = svg2.append("g")
.attr("class", "fnode");
var linkg = svg2.append("g")
.attr("class", "links")
.attr("id", "linkg");
d3.json("..//vizData//forceLayout//forceLayout_15000.json", function(error, graph) {
if (error) throw error;
simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function (d) {
return d.id;
}).distance(30).strength(1))
.force("charge", d3.forceManyBody().strength(-2).distanceMin(15).distanceMax(180))
.force("center", d3.forceCenter(w / 2, h / 2))
.force("collide", d3.forceCollide().strength(1).iterations(2));
link = linkg.selectAll("line")
.data(graph.links)
.enter().append("line")
.attr("stroke-width", function (d) {
return scale(d.value);
});
fnode = fnodeg.selectAll("circle")
.data(graph.nodes)
.enter().append("circle")
.attr("r", radius)
.attr("fill", function (d) {
return color(d.truth);
});
simulation
.nodes(graph.nodes);
simulation.force("link")
.links(graph.links);
groups = d3.nest().key(function(d) { return d.group; }).entries(graph.nodes);
simulation.on("tick", ticked);
fnode.append("title")
.text(function (d) { return d.id; });
link.append("title")
.text(function (d) { return d.value; });
})
</script>
我引用了这个 http://bl.ocks.org/donaldh/2920551凸包示例;他在 tick 函数之外设置了他的“groups”变量,没问题。
我做错了什么???
最佳答案
基于 Andrew's answer ,当你的集群只有两个点时,你可以简单地推送另一个内部数组:
if (d.values.length === 2) {
var arr = d.values.map(function(i) {
return [i.x, i.y];
})
arr.push([arr[0][0], arr[0][1]]);
return "M" + d3.polygonHull(arr).join("L") + "Z";
这是您的代码,仅进行了更改:
var radius = 5.5;
var color = d3.scaleOrdinal(d3.schemeCategory20b);
var scale = d3.scaleLinear()
.domain([0.5, 1])
.range([1.8, 3.8]);
var svg2 = d3.select("#svg2");
var w = +svg2.attr("width"),
h = +svg2.attr("height");
var hull = svg2.append("path")
.attr("class", "hull");
var groupPath = function(d) {
if (d.values.length === 2) {
var arr = d.values.map(function(i) {
return [i.x, i.y];
})
arr.push([arr[0][0], arr[0][1]]);
return "M" + d3.polygonHull(arr).join("L") + "Z";
} else {
return "M" + d3.polygonHull(d.values.map(function(i) {
return [i.x, i.y];
}))
.join("L") + "Z";
}
};
function ticked() {
link
.attr("x1", function(d) {
return d.source.x;
})
.attr("y1", function(d) {
return d.source.y;
})
.attr("x2", function(d) {
return d.target.x;
})
.attr("y2", function(d) {
return d.target.y;
});
fnode
.attr("cx", function(d) {
return d.x = Math.max(radius, Math.min(w - radius, d.x));
})
.attr("cy", function(d) {
return d.y = Math.max(radius, Math.min(h - radius, d.y));
})
.attr("r", radius);
delayHull(1000);
}
function delayHull(delay) {
setTimeout(function() {
svg2.selectAll("path")
.data(groups)
.attr("d", groupPath)
.enter()
.append("path")
.attr("class", "hull")
.attr("d", groupPath);
}, delay);
}
var simulation, link, fnode, groups;
var fnodeg = svg2.append("g")
.attr("class", "fnode");
var linkg = svg2.append("g")
.attr("class", "links")
.attr("id", "linkg");
d3.json('https://api.myjson.com/bins/bkzxh', function(error, graph) {
if (error) throw error;
simulation = d3.forceSimulation()
.force("link", d3.forceLink().id(function(d) {
return d.id;
}).distance(30).strength(1))
.force("charge", d3.forceManyBody().strength(-2).distanceMin(15).distanceMax(180))
.force("center", d3.forceCenter(w / 2, h / 2))
.force("collide", d3.forceCollide().strength(1).iterations(2));
link = linkg.selectAll("line")
.data(graph.links)
.enter().append("line")
.attr("stroke-width", function(d) {
return scale(d.value);
});
fnode = fnodeg.selectAll("circle")
.data(graph.nodes)
.enter().append("circle")
.attr("r", radius)
.attr("fill", function(d) {
return color(d.truth);
});
simulation
.nodes(graph.nodes);
simulation.force("link")
.links(graph.links);
groups = d3.nest().key(function(d) {
return d.group;
}).entries(graph.nodes);
simulation.on("tick", ticked);
fnode.append("title")
.text(function(d) {
return d.id;
});
link.append("title")
.text(function(d) {
return d.value;
});
});
.links line {
stroke: #999;
stroke-opacity: 0.8;
}
.fnode circle {
stroke: #fff;
stroke-width: 1.5px;
fill-opacity: 1;
}
.hull {
fill: steelblue;
stroke: steelblue;
fill-opacity: 0.3;
stroke-opacity: 0.3;
stroke-width: 10px;
stroke-linejoin: round;
}
<script src="https://d3js.org/d3.v4.js"></script>
<svg id="svg2" width="600" height="600" style="margin-left: -5px"></svg>
关于javascript - D3 : How to draw multiple Convex hulls on Groups of Force layout nodes?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45912361/
我想知道两个 3D 凸包(A vs B)之间碰撞位置的近似 3D 位置和 3D 法线。 括号中的 CPU 显示了我完成的程序所需的相对 CPU 时间。 第 1 部分:提前退出(CPU 1%) 在第一步
我的问题与 Plow's Question 非常相似;但有这个区别: 如何找到适合非凸区域的最大凸区域? 例如,考虑这个非凸区域: 任何想法或解决方案将不胜感激,谢谢。 最佳答案 我写了 an ans
我完全意识到,像线性代数包一样,凸优化包应该是您使用的东西,而不是实现的东西。但是,出于纯粹的教育目的——是否有任何好的资源——关于如何实现凸优化包的链接/书籍? (比如具有二次约束的二次规划?) 谢
所以我正在学习凸包算法,并编写了从朴素的蛮力到格雷厄姆扫描的所有算法。 这是我的 Bruteforce O(n^4) 算法。一开始,假设所有点都是船体的一部分。对于每个可能的三角形,消除位于三角形内的
我该怎么办识别和删除 图像中绘制的那四个红点 这四个点使该多边形成为凹多边形,这就是我想删除它的原因。 我的目标是通过识别和删除这些点来删除这种点,从而将凹多边形转换为凸多边形。 有没有办法识别和删除
我正在使用 CVXPY(版本 1.0)来解决二次程序(QP),我经常遇到这个异常: SolverError: Solver 'xxx' failed. Try another solver. 这使我的
我有一组二维点,我想从中生成一个多边形(或多边形集合)来勾勒出这些点的“形状”,使用以下概念: 对于集合中的每个点,计算该点半径 R 内所有点的凸包。对每个点执行此操作后,将这些凸包合并以生成最终形状
我正在尝试在 CUDA 中并行实现 quickHull 算法(用于凸包)。它适用于 input_size pts.size()) { printf
Closed. This question does not meet Stack Overflow guidelines。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-topic
我修改了 Three.js 库中的示例,并尝试在对象上添加点击事件。 经过多次尝试...我仍然无法监听点击。 此代码生成凸形式。 这是我的代码: if ( ! Detector.web
如果我有这样的 QuadCurve (+ = node): + + \ ./ +--⁻⁻ 我用 Java 2D 填充它,结果是这样的:(x = colored) +x
我正在制作一个分析几何的小应用程序。在我的程序的一部分中,我使用了一种算法,该算法具有 将凸对象作为输入。幸运的是,我所有的对象最初都是凸的,但有些勉强如此(见图)。 在我应用一些转换后,我的算法无法
相同的应用程序在 Android 7 中工作,但在 Android 8 中失败。 在一项 Activity 中,我正在从 Fire-base 数据库中检索数据。当 Fire-base 数据库为空时没有
这个学期,我在学校上了计算机图形学类(class),我们的第一个作业是创建凹凸错觉。 这是我应该创建的示例: Concave/Convex Circle Illusion 我试图自己解决这个问题,但我
我在创建复杂的凸包时遇到问题。如果我更改为具有 10 个点左右的简单多边形,效果很好,但是当我在大面积上有 20-30 个点时,它会在多边形中创建“分割”。然而数学表明它应该寻找所有异常值,并将它们用
我正在创建一个 Python 程序,该程序将拍摄图像(一张床的照片),然后运行 Canny 边缘检测,然后运行凸包轮廓检测以找出床的位置。 这是我的图像(请原谅丑陋的 Photoshop 工作)
我需要一些帮助来编写这个 algorithm . 对于一组给定的空间线,我试图在原点(引用点)为 0.5,0.5,0.5 时找到可访问的体积。 .目前,我执行以下操作: 对于每条线,计算到原点的距离
我正在尝试在力布局中的所有组上绘制凸包。但我只画了一半的凸包。当 D3 尝试绘制其余的外壳时,控制台返回错误:尚未创建元素。然而,当我检查控制台中的“组”变量时,所有组数据都在那里,x、y 数据都设置
在下面的代码中,我试图找出一个对象是否为绿色并在其周围绘制轮廓。有了这些信息,我还想找到形状的角并对其进行裁剪,但是我收到了与代码中未使用的 ConvexHull 函数相关的错误。我用过 python
我想使用 Voronoi 图提取边缘点(点位于凸包边界的边缘)。我知道 unbounded 单元格包含一个边界站点点,但我如何使用迭代器访问该信息? 解决方案 VD vd; //initialise
我是一名优秀的程序员,十分优秀!