2016-05-20 11 views
0

Мне нужно оценить коэффициент перекрытия двух прямоугольников произвольного размера и ориентации.Приблизительная площадь перекрытия вращающихся прямоугольников

Я знаю, как выполнить точные вычисления, используя алгоритм Сазерленда-Ходжмана, который можно оптимизировать для этого случая.

В любом случае, поскольку мне нужно использовать эту функцию, интенсивная и совершенная точность не требуется (скажем, 10% -ная ошибка может быть допущена), мне было интересно, не может ли она быть оценена быстрее, желательно без разветвления.

Если это помогает, можно предположить, такое же соотношение сторон для обоих прямоугольников, а отношение площадей не превышает 4.


Update:

  1. Для прямоугольников поворотов,, формула

    (мин (W0, W1 + DX) - макс (-w0, DX-W1)) (мин (Н0, DY + H1) - макс (Н0, DY-H1)).

    или ноль, если какой-либо из двух факторов отрицательный, где DX, DY - разница между центральными координатами, W и H обозначают соответствующие половинные размеры.

  2. Возможно, стоит посмотреть на кривую общей площади для заданного размещения центров и заданных размеров, когда вы меняете относительный угол поворота.

+0

Просто спекуляция, как насчет выборки? То есть, если преобразование A отображает выровненную ось, 0 центрированный прямоугольник на один из ваших прямоугольников, а B сопоставляется с другим, а затем для коллекции выборочных точек p из выровненной второй оси прямоугольника вы подсчитываете количество раз inv (A) (B (p)) находится в первом выровненном по оси прямоугольнике; отношение количества обращений к числу выборок было бы приближением к отношению площади пересечения к площади второго прямоугольника, выровненного по оси. – dmuir

+0

@ dmuir: это совершенно верно. Теперь цель состоит в том, чтобы уменьшить вычислительную стоимость, так что количество разрешенных выборок будет очень ограниченным (например, менее десяти я думаю). –

+0

, если ваш язык позволяет это сделать, вы можете делать много вычислений выборки параллельно. – dmuir

ответ

0

Алгоритм Sutherland-Hodgman предназначен для пересечения выпуклого многоугольника клипа с произвольным. Я ожидал бы, что алгоритм, специально разработанный для выпуклого выпуклого случая, будет быстрее.

Я имел хороший практический опыт работы с О'Рурками алгоритмом (O (M + N)) для задачи, так
(область пересечения между двумя наборами тысяч повернутых прямоугольников).

Code link is here - convconv. AFAIR, некоторые упрощения были возможны для прямоугольников.

Another algorithm

Я сомневаюсь, что любое приближение подход может значительно быстрее и с контролируемой точностью найти результат.

+0

Mh, здесь m = n = 4, так что оптимизированная грубая сила, вероятно, лучше всего по сравнению с сложными алгоритмами, которые страдают от большего числа тестов и ветвей. (Для точного подхода я бы использовал рекурсивный SH с четырьмя этапами, делая ось отсечения прямоугольной оси параллельной и жестко кодирующей боковыми уравнениями.) Я больше ищу одну замкнутую формулу, полученную, например, переключением на другие фигуры (эллипсы?). –

+0

Да, я думал, что вы хотите для кругов или эллипсов, но не представляете себе хорошего приближения без определения вершин пересечения или, по крайней мере, типа пересечения (угловой угол, угол-край, крест, два угла внутри и т. Д.), – MBo

 Смежные вопросы

  • Нет связанных вопросов^_^