javascript - 创建一个多边形计算形状javascript d3
问题描述
我在 http://bl.ocks.org/gka/1552725找到了关于如何执行此操作的很好的解释, 从 Delaunay 三角剖分计算 alpha 形状的边界多边形,但这是使用 d3 的版本 3,我正在使用版本4. 我已经设法使用 v4 实现了一些示例,但不知道如何过滤三角形到目前为止,我已经做到了:
我将不胜感激任何帮助。我的代码如下所示:
vertices = vertices.map((d) => {
//console.log(d)
return [xScale(d[0]),yScale(d[1])]
})
let alpha = 30
let dsq = function(a,b) {
var dx = a[0]-b[0], dy = a[1]-b[1];
return dx*dx+dy*dy;
}
let asq = alpha*alpha
vertices = vertices.filter(function(t) {
return dsq(t[0],t[1]) < asq && dsq(t[0],t[2]) < asq && dsq(t[1],t[2]) < asq;
})
let outline = Delaunay.from(vertices)
//let { points, triangles } = outline;
parent.append('path')
.attr('fill', '#FCE6D6')
.attr('opacity',0.5)
.attr('stroke', '#000000')
.attr('d', outline.render());
将最后一行更改为:
.attr('d', outline.renderHull());
会给我形状的凸包,但这是我要创建的凹包。我猜我在通过 Delauny.from(vertices) 将它们传递给轮廓常量之前过滤了顶点。我已经尝试使用上面链接的 v3 示例中的方程式,但这只是删除了所有顶点。
解决方案
推荐阅读
- scrapy - Scrapy,使用可扩展的队列池机制为蜘蛛创建队列
- swift - Firebase Firestore - 在 Swift 的自定义对象中使用 ServerTimeStamp
- c# - 如何在 UWP 导航视图元素中显示当前 Windows 用户 PFP
- kedro - 在 DataCatalog 中指定 Kedro 数据版本?
- ionic3 - 离子可选择打开时如何显示加载程序
- django - 如何在 Django 中过滤和显示“多对多”元素
- javascript - 节点 - 在后台不规则地运行脚本
- wireshark - 如何将 .pcapng 文件(wireshark)数据转换为 .bin 文件
- laravel - 如何在 laravel 8 中使用复合主键?
- javascript - Discord JS clearTimeout 未重置 setTimeout