【问题标题】:Finding two areas of a rectangle separated by a line查找由一条线分隔的矩形的两个区域
【发布时间】:2020-10-03 12:30:44
【问题描述】:

给定一个矩形和矩形边界上的两个点,这两个点永远不会共享相同的边界,画一条连接这两个点的线。求用这条线分割矩形形成的两个多边形的面积。我正在寻找一种算法来找到这两个区域。

这似乎是一个简单的问题,但我找不到一致的方法来编写算法。

以下是一些示例案例的问题说明:

【问题讨论】:

  • 三角形和梯形的面积公式是众所周知的。那么真正的问题是什么?
  • @MBo 他们是众所周知的。我意识到的棘手部分是想出一个包含所有可能点位置的公式。适用于左上角矩形的梯形的简单公式不适用于两个点位于左右边界上的另一个矩形。这最终演变为检查大量案例和各种方向,变得乏味。因此,为什么我要求一种算法,希望能有一个优雅的解决方案。
  • 所以值得描述这个问题。此外,您还必须编写矩形和相交线段的定义方式。

标签: algorithm math geometry computational-geometry


【解决方案1】:

如果我们检查 6 种可能的配置,我们会发现,在所有情况下,一个多边形的面积都等于由直线端点(红色)形成的矩形面积的一半,再加上另一个矩形(绿色)。线条跨越外部矩形的宽度或高度的情况。

因此,一个多边形的面积由下式给出:

r1, r2 : corner points of the rectangle
p1, p2 : endpoints of the line

area = abs(p1.x - p2.x) * abs(p1.y - p2.y) / 2

if abs(p1.x - p2.x) == abs(r1.x - r2.x)
  area = area + abs(r1.x - r2.x) * (min(p1.y, p2.y) - min(r1.y, r2.y))
else if abs(p1.y - p2.y) == abs(r1.y - r2.y)
  area = area + abs(r1.y - r2.y) * (min(p1.x, p2.x) - min(r1.x, r2.x))

【讨论】:

  • 漂亮、紧凑、高效!
  • 插图很好,答案也很好!谢谢!
  • @RaffleBuffle 你能澄清一下 r1,r2 到底是什么吗?矩形的一个角总是原点,另一个总是 p1(使 r1,r2 成为另外两个角)?
  • @VainmondeDeCourtenay r1 和 r2 是平面中的点 - 两个点定义一个矩形。在您的其他问题 r1 = (0,0) 和 r2 = (m, n) 的上下文中。希望这是有道理的。
【解决方案2】:

总共有2个案例。假设 A 和 B 分别是红线左侧和右侧的角数。
情况1:A = B = 2,则有2个梯形。
情况 2:A = 1 或 B = 1,则至少有 1 个三角形。

【讨论】:

    【解决方案3】:

    给定直线的两个点,您可以从矩形的角上选取另外两个点来获得四边形,然后您可以使用shoelace formula 来计算该四边形的面积。

    如果你找到一个四边形面积,你可以通过从整个矩形的面积中减去第一个四边形的面积来找到另一个面积。

    【讨论】:

      猜你喜欢
      • 2010-12-05
      • 2011-06-06
      • 1970-01-01
      • 1970-01-01
      • 2020-06-16
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多