質問

私は現在、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メッセージを送信します。これには、変換された、新しいパスを返します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top