0

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

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

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

私の現在のアルゴリズムは、containsPointがtrueである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

グラフ

4

1 に答える 1

3

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

パスにbezierPathByFlatteningPathメッセージを送信します。これにより、新しいパスが返されるため、変換されます。

于 2009-09-02T10:13:19.597 に答える