2

2つのCGPath間のオーバーラップの程度を確認しようとしています。私が思いついた最も簡単な方法は、境界CGRect間のオーバーラップのパーセンテージを取得することです。異なるパスが同様の境界を占める場合、これは失敗することを私は知っています。しかし、まあ、あなたがより良い方法を知っているなら...助けてください。

とにかく、現在の質問は、rects間のオーバーラップ率の計算に関するものです。交差の長方形を取得するためのCGRectIntersection関数が表示されます。この長方形の面積を計算することはできますが、交差していない領域の面積を取得する簡単な方法はないようです。何か案は?rectUnionの面積からその面積を引くことは意味がありますか?rectUnionを正しく理解していれば、ユニオンと交差点が同じサイズであれば、完全に重なっていますか?

4

1 に答える 1

1

よくわからないと思います。CGRect Aと別のBの「非交差領域」は、Aの領域から交差領域を引いたものではありませんか?要するに、オーバーラップのパーセンテージは、交差する面積を合計面積で割ったものにちょうど等しいのではありません。

Area(A ^ B)/(Area(A) + Area(B) - Area(A^B))

(ところで、RectUnionは、AとBのどちらにも大量のスペースがある可能性があるため、扱いたくないと思います。)

ああ、あなたの元の質問では、それは私のグラフィックス能力を超えていますが、基本的なテクニックは、グラフィックスコンテキスト(おそらくXORを使用)で両方のパスを描画し、どのピクセルがまだ残っているかを確認することです。ここに道を示すコードがあるようです:CGPathをCGRectにクリップする

于 2011-06-27T03:13:57.043 に答える