javascript - 无法使用 d3.js 剪切多边形

标签 javascript d3.js geometry polygons

我正在尝试获取一个多边形并用其相交区域切割另一个多边形。我认为 d3.geom.polygon 的方法剪辑可以工作,但是当我在下面的 fiddle 中尝试它时,我似乎遇到了各种奇怪的问题。

http://jsfiddle.net/RussellAsher/335089x2/8/

如果有人知道我将如何在有或没有 d3.js 的情况下做到这一点,我将永远感激不已。

我尝试使用的 d3 方法:

var p1 = d3.geom.polygon(arrayOfPolygons[0].points);
var p2 = d3.geom.polygon(arrayOfPolygons[1].points);
p2.clip(p1);

最佳答案

d3.js 来源:

https://github.com/mbostock/d3/blob/master/src/geom/polygon.js#L49-L86

在第 49 行你可以读到:

// The Sutherland-Hodgman clipping algorithm.
// Note: requires the clip polygon to be counterclockwise and convex.
d3_geom_polygonPrototype.clip = function(subject) {
...
}

你应该像这样使多边形反向:

enter image description here

就您而言:

var vis = d3.select("body").append("svg").attr({
    width: 1000,
    height: 667
}),

// I deleted scales there to make the code smaller

arrayOfPolygons = [{
    name: "polygon 1",
    points: []
}, {
    name: "polygon 2 ",
    points: []
}];

// clockwise polygon
arrayOfPolygons[0].points = [
    [5.5, 15.5],
    [24.0, 15.5],
    [20.5, 20],
    [12.0, 45.5],
    [4.0, 20]
];
// counterclockwise polygon
arrayOfPolygons[1].points = [
    [4.5, 24.5],
    [14.0, 24.5],
    [18.5, 20],
    [0.0, 20]
];

var p1 = d3.geom.polygon(arrayOfPolygons[0].points);
var p2 = d3.geom.polygon(arrayOfPolygons[1].points);
var p_x = p1.slice();// cloned polygon
p2.clip(p_x);// cloned polygon clipped

// the first polygon
vis.append("svg:polygon").attr({
    points: p1,
    stroke: "black",
    fill: "none"
});

// the second polygon
vis.append("svg:polygon").attr({
    points: p2,
    stroke: "black",
    fill: "none"
});

// clipped part
vis.append("svg:polygon").attr({
    points: p_x,
    stroke: "red",
    fill: "yellow"
});

最终结果:

演示:http://jsfiddle.net/335089x2/12/

现在您可以添加 data() 函数和比例。

关于javascript - 无法使用 d3.js 剪切多边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29150535/

相关文章:

javascript - 无法读取未定义的属性替换

javascript - 如何将变量带入 d3 中的 .each 方法的范围

javascript - 如何让 div 在 onclick nr 2 之后消失?

javascript - 如果单击某些 div,则不执行 keydown 函数

javascript - react 多个高阶组件

javascript - 使用 jQuery 和 CSS 设计一个 d3 元素

javascript - D3 Canvas 强制布局 - 脱节组排斥另一组

java - Delaunay 对带孔的二维多边形进行三角剖分

python - 如何平均划分椭圆的周长?

c++ - 计算两个四边形交点的方法?