如果您知道您的四边形是一个矩形,那么您可以使用一些简单的矢量数学来找到角的坐标。已知的有:
-
(x1,y1) - 顶线中点坐标
-
(x2,y2) - 底线中点坐标
-
l1 - 顶线和底线的长度
-
l2 - 其他两行的长度
首先,我们找到两个已知点之间的向量。这个向量平行于边线:
(vx, vy) = (x2 - x1, y2 - y1)
我们需要对该向量进行归一化(即使其长度为 1),以便稍后我们可以将其用作查找坐标的基础。
vlen = sqrt(vx*vx + vy*vy)
(v1x, v1y) = (vx / vlen, vy / vlen)
接下来,我们将这个向量逆时针旋转 90 度。旋转的矢量将平行于顶线和底线。 90 度旋转原来只是交换坐标并否定其中一个。您只需在纸上尝试即可看到这一点。或查看equations for 2D rotations 并替换为 90 度。
(u1x, u1y) = (-v1y, v1x)
现在我们有足够的信息来找到“左上角”。我们只需从我们的点 (x1, y1) 开始,然后沿着该边向后移动一半边长:
(p1x, p1y) = (x1 - u1x * l1 / 2, y1 - u1y * l1 / 2)
从这里我们可以通过添加我们的基向量的适当倍数来找到剩余的点。在实现这一点时,您显然可以通过只计算一次唯一的乘法来加速它:
(p2x, p2y) = (p1x + u1x * l1, p1y + u1y * l1)
(p3x, p3y) = (p1x + v1x * l2, p1y + v1y * l2)
(p4x, p4y) = (p3x + u1x * l1, p3y + u1y * l1)