找到由一条线分隔的矩形的两个区域

Finding two areas of a rectangle separated by a line

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

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

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

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

如果找到一个四边形面积,只需用整个矩形的面积减去第一个四边形的面积就可以找到另一个面积。

一共2个案例。假设A和B分别是红线左侧和右侧的角点数。
情况1:A = B = 2,则有2个梯形。
情况 2:A = 1 或 B = 1,则至少有 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))