Cách tốt nhất (cả mã khôn ngoan và hiệu năng) để kiểm tra xem hai hình dạng được vẽ bởi svg path
có giao nhau không? Tôi đang thực hiện điều này trong d3 và đang sử dụng "đóng dấu chính" trong sốgiao nhau với đường dẫn khép kín svg
Cụ thể hơn, tôi đang tạo vỏ lồi (phức tạp hơn trong hình ảnh) và tôi muốn kết hợp vỏ nếu chúng chồng lên nhau. Sẽ dễ dàng nếu tôi sử dụng nội suy "tuyến tính đóng", vì sau đó tôi có thể sử dụng các đỉnh để tính các giao lộ, nhưng nội suy "hồng y đóng" trông tốt hơn khi tôi sử dụng nó.
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));
Đây là một jsfiddle. Làm cách nào để kiểm tra xem các hình dạng này có giao nhau/chồng chéo không?
Tôi nghĩ rằng bạn sẽ phải nhận được vào nitty-gritty của sao 'đường hồng y-closed' được thực hiện. Giống như, nếu bạn đặt nó thành 'tuyến tính', hai hình dạng không giao nhau. Vì vậy, một cái gì đó về cách này (http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline) xảy ra sẽ phải được đưa vào tài khoản khi đến với một bài kiểm tra – elsherbini
Bạn có thể sử dụng [thư viện giao lộ tuyệt vời từ Kevin Lindsey] (http://www.kevlindev.com/geometry/2D/intersections/index.htm) để kiểm tra xem có hai hình SVG giao nhau hay không. – Phrogz
Cảm ơn bạn @Phrogz, thư viện đó thực sự tuyệt vời !! :) – swenedo