количество прямого пересечения? - PullRequest
2 голосов
/ 27 июня 2011

Я пытаюсь проверить степень совпадения между 2 CGPaths.самый простой способ, который я придумал, - это получить процент перекрытия между ограничивающими CGRect.Я знаю, что это потерпит неудачу, когда разные пути занимают одинаковые границы.ну да ладно, если вы знаете лучший способ ... пожалуйста, помогите.

в любом случае, текущий вопрос касается расчета процентного совпадения между ритами.я вижу функцию CGRectIntersection, чтобы получить прямоугольник пересечения.Я могу вычислить площадь этого прямоугольника, но, похоже, нет простого способа получить площадь непересекающихся областей.есть идеи?будет ли смысл вычитать эту область из области rectUnion?если я правильно понимаю rectUnion, если объединение и пересечение имеют одинаковый размер, они полностью перекрываются?

1 Ответ

1 голос
/ 27 июня 2011

Я не совсем понимаю, я думаю. Разве «непересекающаяся область» CGRect A с другим B - это просто область A минус пересекающаяся область? Или, более точно, разве процентное перекрытие не равно просто пересеченной области, деленной на общую общую площадь:

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

(Кстати, я не думаю, что вы хотите иметь дело с RectUnion, так как в нем потенциально может быть много места ни в A, ни в B.)

Да, и по вашему первоначальному вопросу, это выходит за рамки моих графических способностей, но основной метод, кажется, состоит в том, чтобы нарисовать оба Пути в графическом контексте (возможно, с XOR) и посмотреть, какие пиксели все еще остаются. Кажется, здесь есть некоторый код, указывающий путь: Обрезка CGPath до CGRect

...