NSBezierPath /ライン交差点/フラット化
-
21-09-2019 - |
質問
私は現在、MacRubyの/ココアに自分のJRuby / 2Dでグラフ描画/レイアウト機能のアプリケーションを移植しています。そこで私は、閉じたNSBezierPathで開いNSBezierPathの交点を取得する必要があります。
2Dで、私は、次のトリックを使用していました。私は両方のパスを平坦化し、各セグメントのためのシンプルなラインの交差テストをしました。
だから、直線の束にNSBezierPathを変換する簡単な方法はありますか?
私はcontainsPointが真であるNSPointを見つけるまで、私の現在のアルゴリズムは、単純に(バイナリ検索方法で)行を歩きます。しかし、それは直線のみで動作します。私は2Dで実装1はあまりにも曲がったパスのために働いています。
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
解決
だから、直線の束にNSBezierPathを変換する簡単な方法はありますか?
のパスにbezierPathByFlatteningPath
メッセージを送信します。これには、変換された、新しいパスを返します。
所属していません StackOverflow