2013-06-19 20 views
12

svg pathで描画された2つの図形が交差しているかどうかをテストする良い方法(コード通りとパフォーマンス上の両方)はありますか?私はd3でこれをやっていて、 "基点閉鎖"を使用しています。svgクローズパスを交差する

より具体的には、私は凸包を作成しています(イメージより複雑です)。 「線形閉包」補間を使用すると簡単ですが、交点を計算するために頂点を使用できますが、「基礎閉鎖」補間は使用する場所によってよく見えます。ここで

Output of code

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)); 

jsfiddleです。 これらの図形が交差/重なっているかどうかをテストするにはどうすればよいですか?

+0

を使用する必要があります言ったように。同様に、「線形」に設定すると、2つの図形は交差しません。だから、この方法(http://en.wikipedia.org/wiki/Cubic_Hermite_spline#Cardinal_spline)のやり方については、テストの際に考慮する必要があります。 – elsherbini

+7

Kevin Lindseyの素晴らしい交差ライブラリを使用することができます。 (http://www.kevlindev.com/geometry/2D/intersections/index.htm)を使用して、2つのSVG図形が交差するかどうかをテストします。 – Phrogz

+0

ありがとう@Phrogz、そのライブラリは本当に素晴らしいです! :) – swenedo

答えて

4

@Phrogzあなたはおそらく、私はあなたが `カーディナル・closed`パスが作られる方法の核心ザラザラに取得しなければならないと思うintersection library.