2009-09-02 11 views
0

私は現在、自分のjruby/java2dグラフ描画/レイアウトアプリケーションをmacruby/cocoaに移植しています。したがって、開いたNSBezierPathと閉じたNSBezierPathの交点を取得する必要があります。NSBezierPath/Line Intersection/flatten

java2dで私は以下のトリックを使用しました。両方のパスを平坦化し、各セグメントの単純な線の交差テストを行いました。

NSBezierPathを一連の直線に変換する簡単な方法はありますか?

私の現在のアルゴリズムは、containsPointが真であるNSPointを見つけるまで、私の現在のアルゴリズムは単に(二分探索法で)行を歩いています。しかし、それは直線のためだけに働く。私がjava2dで実装したものもカーブしたパスのために働いていました。

def getIntersection edge, path 
    out = edge.source 
    ins = edge.target 
    until (out.dist(ins) < 1.0) 
    mid = out + ((ins - out) * 0.5) 
    if (path.containsPoint (NSMakePoint(mid.x, mid.y))) 
     ins = mid 
    else 
     out = mid 
    end 
    end 
    return out 
end 

Graph http://i28.tinypic.com/168zs03.png

答えて

3

ので、直線の束にNSBezierPathを変換する簡単な方法はありますか?

bezierPathByFlatteningPathメッセージを送信します。これは変換された新しいパスを返します。

+1

私にはっきりと分かるRTFMを教えてくれてくれてありがとう。 – thestoneage