пересекающиеся замкнутые пути svg

что такое хороший способ (как с точки зрения кода, так и производительности), чтобы проверить, если две фигуры, нарисованные svg path пересекающиеся? Я делаю это в d3 и использую "cardinal-closed"строку интерполяции

более конкретно, я создаю выпуклые корпуса (более сложные, чем на изображении), и я хочу объединить корпуса, если они перекрываются. Это легко сделать, если я использую" линейно-замкнутую " интерполяцию, потому что тогда я могу использовать вершины для вычисления пересечений, но "кардинал-закрытая" интерполяция выглядит лучше там, где я ее использую.

var v1 = [[100,100],[200,100],[200,200],[100,200]],
v2 = [[210,100],[310,100],[310,200],[210,200]];

var hull1 = d3.geom.hull(v1),
    hull2 = d3.geom.hull(v2);

var svg = d3.select("#foo")
    .append("svg");

var line = d3.svg.line()
    .interpolate("cardinal-closed")
    .x(function(d) {return d[0];})
    .y(function(d) {return d[1];});

svg.append("path")
    .attr("d", line(hull1));
svg.append("path")
    .attr("d", line(hull2));

Output of code

здесь jsfiddle. Как проверить, пересекаются ли эти фигуры / перекрываются?

1 ответов


Как сказал @Phrogz, вы, вероятно, должны использовать библиотека перекрестке.