【问题标题】:how to calculate area of Intersection of Two Rotated Rectangles in Java?如何在Java中计算两个旋转矩形的交点面积?
【发布时间】:2022-01-15 10:44:50
【问题描述】:

我有两个二维矩形,定义为 (x,y,height,width,angle)。我需要计算这两个矩形相交的大致面积。

enter image description here

如何在 JAVA 中做到这一点?是否有任何 JAVA 库(例如 Python 中的 shapely 包)可用于此目标? (我不确定 shapely 包如何计算两个矩形相交的面积,但我认为它很适合这个目标)

【问题讨论】:

  • 这是数学。使用交点,您将再次获得一个凸多边形,因此您可以轻松地将其拆分为三角形,并对这些区域求和。不需要,但旋转使一个矩形垂直,使计算交点更容易。 (旋转时区域不会改变。)
  • @JoopEggen 当您说 不需要,... 时您可能一直在考虑这一点,但 OP 可以应用 Heron's 公式来计算三角形的面积。
  • @WJS Heron of Alexandria 非常方便,只需要三角形边的长度。 不需要我的意思是轮换。
  • @JoopEggen:挑战在于找到交叉点。区域很容易。

标签: java geometry computational-geometry intersection rectangles


【解决方案1】:

您可以使用 Sutherland-Hodgman 裁剪算法来计算相交多边形(从三角形到八边形)。这相当于在定义另一个多边形的四个半平面内剪裁其中一个多边形。可能值得将算法专门用于矩形,并可能使剪切多边形轴对齐(如 Joop 所建议的那样)。

然后通过鞋带公式计算面积。

Toussaint (http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.50.7083) 提出了一种有效的线性时间凸多边形相交算法,但实现起来并不容易,而且对于这样的小目标可能没什么好处。

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多