Что такое алгоритм определения общей площади двух прямоугольников, которые пересекаются и могут поворачиваться с осевых координат?Общая площадь пересекающихся прямоугольников
ответ
Вот примерно то, что вам нужно сделать, выраженный как обычно, как это возможно, но охватывающий все возможности:
- Отработать класс пересечения. То есть Сколько ребер имеет область пересечения? Это может быть любое значение от 0 до 8.
- Найти все вершины пересечения. Это будут все пересечения между краями прямоугольников и соответствующие углы самих прямоугольников. Работа с этим битом является самой сложной/утомительной.
- Определите площадь пересечения, разделив его на треугольники, если это необходимо.
Вот все способы прямоугольники могут пересекаться:
Update
У меня были кое-какие мысли, и лучший способ классифицировать пересечение проследить вокруг периметра каждый прямоугольник и подсчитывать количество раз, когда каждое ребро пересекает другое ребро. Вы получите вектор, например. для шестисторонней зоны пересечения: {1,1,1,1}, {0,1,1,1} и для 8: {2,2,2,2}, {2,2,2,2} , Два специальных случая, которые вам нужно проверить, - это когда один прямоугольник полностью перекрывает другой и когда края находятся в очереди. Вам понадобятся тщательные проверки, но это будет отправной точкой для функции, чтобы классифицировать пересечение.
Поскольку прямоугольники могут быть наклонены, пересечение может быть также треугольником –
. Также существует вероятность того, что пересечение может быть 5, 6, 7 или 8-сторонним. –
Я исправил свой ответ, пропустил ли я какие-либо случаи? – fredley
Хорошо, у вас есть 3 возможности: 1. Прямоугольники не пересекаются 2. Один прямоугольник полностью находится внутри другого (или они совпадают) 3. В результате пересечения некоторый выпуклый многоугольник. Вы вычисляете область многоугольника, разбивая ее на треугольники (путем отрисовки сегментов от первой вершины к каждой другой, за исключением смежных один раз). Вы суммируете области. Вы можете использовать теорему Геродота, чтобы вычислить область треугольника, и вот где находится геометрия средней школы.
Теорема Геродота? Вы имеете в виду формулу Герона? – IVlad
Уверен, что Геродот гораздо интереснее читать, чем Херон .... –
@belisarius - на самом деле я не думаю, что он может быть вогнутым. Конечно, этот ответ не имеет никакого смысла, и я отказался от него, но я не вижу, как пересечение может быть вогнутым ... – IVlad
Площадь (R1 union R2) = Area (R1) + Area (R2) - Area (R1 intersection R2), поэтому вы можете вычислить область пересечения, чтобы иметь площадь союза.
Пересечение двух прямоугольников (или два выпуклых многоугольников) просто:
- Они представляют собой выпуклые многоугольники
- Их точки характеризуются следующим образом: точки пересечения любой пары ребер, и точки одного прямоугольника которые находятся внутри другого.
Так это выглядит следующим образом:
- Ь первоначально пустое связанный список
- R1 имеет ребра e1, e2, e3, e4, R2 имеет ребра f1, f2, f3, f4. Вычислить точки пересечения ei и fj для всех i, j = 1,2,3,4. Добавьте их в список L.
- Для каждой вершины v из R1, если v находится внутри R2, добавьте ее в L.
- Для каждой вершины w R2, если w находится внутри R1, добавьте ее в L.
Выпуклая оболочка точек в L - это ваше пересечение. Поскольку каждая точка в L находится на границе пересечения, вы можете триангулировать ее и вычислить ее площадь. Легко:
- L = [x0, x1, ...]
- Сортировка точек в L в соответствии с углом (XI - х0) по отношению к горизонтальной линии, проходящей через точку х0
- первого треугольника является x0, x1, x2
- Второй треугольник x0, x2, x3
- п-й треугольник х0, х (п + 1), х (п + 2)
площадь треугольника по формуле Heron:
- а, Ь, с длинами ребер
- S = 0,5 * (а + B + C)
- площадь = SQRT (S * (S - а) * (S - B) * (s - с))
но остерегайтесь вычисления s - а, с - Ь и с - Ĉ independantly, так как вы можете столкнуться ошибку округления (что, если с ~ а и б < <, например)
?Рассчитывает пересечение каждого ребра в первом прямоугольнике с каждым ребром во втором прямоугольнике, действительно лучшим решением? – jball
@jball: для прямоугольников это дает вам 16 таких тестов. Для пересечения более сложных выпуклых многоугольников вы можете использовать квадранты или подобные, чтобы избежать большинства тестов. Обратите внимание, однако, что после смены переменных, чтобы положить R1 вдоль осей координат, эти тесты просты. –
Думая об этом больше, поиск пересечения просто создает ненужные вычисления. Лучший метод - найти вершины всего объединения, а затем вычислить его площадь. Это уменьшает расчеты площадей с 3 (2, которые тривиальны) до 1. И есть лучшие алгоритмы, чем триангуляция для вычисления площади многоугольника. – jball
- 1. Общая площадь пересекающихся прямоугольников
- 2. Группы пар пересекающихся прямоугольников
- 3. Быстрое спрямление пересекающихся прямоугольников
- 4. Найти группу пересекающихся прямоугольников
- 5. Получение области двух пересекающихся прямоугольников
- 6. Приблизительная площадь перекрытия вращающихся прямоугольников
- 7. Определите площадь пересечения двух прямоугольников
- 8. Обнаружение двух пересекающихся прямоугольников отдельно в opencv
- 9. Более быстрый способ проверки пересекающихся прямоугольников?
- 10. Общая площадь рабочей области Wirecloud
- 11. Общая площадь, разбитая на группы
- 12. Общая точка в массиве прямоугольников
- 13. Нахождение перекрытия площадь двух прямоугольников (в C#)
- 14. Найти площадь двух пересекающихся окружностей с использованием метода Монте-Карло
- 15. Найти все пары пересекающихся прямоугольников с помощью LINQ
- 16. Общая площадь покрытия SonarQube для JavaScript
- 17. Ярлык, Вход - общая площадь (класс/div)
- 18. повернутых 2d точек прямоугольника пересекающихся или области
- 19. Вычислить столкновение и площадь пересечения двух поворотных прямоугольников/полигонов
- 20. Bing Maps Как получить общую площадь два прямоугольников местоположения
- 21. Расчет Cornerpoints и Ребра пересекающихся Recangles
- 22. Общая площадь или место на Windows Phone 8.1
- 23. Для geom_violin, как указана общая площадь всех скрипок?
- 24. Площадь разброса python Площадь Площадь пропорциональная ось
- 25. Найти количество перекрывающихся прямоугольников
- 26. Два динамических тела, пересекающихся или пересекающихся в cocos2d-x v3.2
- 27. K-окружение Минимальная площадь Площадь
- 28. Множество пересекающихся многоугольников.
- 29. Сложность пересекающихся множеств
- 30. Получить площадь муниципалитета
связанный, но не имеет возможности поворота: [общая площадь пересекающихся прямоугольников] (http: // stackoverflow. com/questions/4549544/total-area-of-intersecting-rectangles/4555164 # 4555164) – jball
Хотелось бы отметить, что самый высокий рейтинг Тома Медли, хотя и очень интересный, - это * не самый простой подход. Прямым решением является использование одного из алгоритмов для [пересечения выпуклых многоугольников] (http://stackoverflow.com/a/13105297/145999) (например, Sutherland-Hodgman), чтобы найти пересечение между обоими прямоугольниками, затем вычислить [область пересечения] (http://www.mathwords.com/a/area_convex_polygon.htm), затем вычислить площадь объединения как Area (rect1) + Area (rect2) - Area (пересечение). Это также указано в ответе Александра С. – HugoRune