python - 如何知道坐标列表是否形成矩形?

标签 python list matrix coordinates

我目前正在尝试弄清楚如何检查我的列表,例如:

[[0, 0], [0, 1], [1, 0], [1, 1]]

像这样形成一个矩形:

A B
C D

A、B、C、D分别为列表的[0, 0]、[0, 1]、[1, 0]和[1, 1]。 这个想法当然是做一些通用的事情,比如:

[[0, 0], [0, 1], [0, 2], [0, 3], [1, 0]]

==> X X X X
    X

应该返回 false。

有没有我可以使用的数学概念?或者也许我以错误的方式问这个问题,并且有一种我看不到的明显方式!无论如何,非常感谢任何帮助!

最佳答案

是的,您可以利用多种属性来完成此任务。

首先,当然是矩形恰好有四个顶点;你的第二份名单应该仅仅因为这些理由而被拒绝。 :-)

否则,您可以检查边的坡度。平行四边形的对边平行。从(x1,y1)到(x2,y2)的线段的斜率为

m = (y2 - y1) / (x2 - x1)

一旦你确认你有一个平行四边形,你需要检查相邻边是否垂直。这些线的斜率的乘积为 -1。因此,如果您已经计算了 m1 到 m4 的四个斜率,并验证了 m1=m3 和 m2=m4,那么剩下的就是检查任何一个角:

if m1*m2 = -1:
    ...

请注意,此处的相等性检查不应要求精确 匹配; float 四舍五入可以给你带来微小的差异。相反,也许

if abs(m1*m2 + 1) < 0.000001:

另一个可能会给您更直接结果的属性是,当且仅当对角线彼此平分时,图形才是矩形。取两条对角线并找到中点。

xmid = (x1 + x2)/2
ymid = (y1 + y2)/2

如果两个中点相同(或非常接近),那么您就有了一个矩形。

关于python - 如何知道坐标列表是否形成矩形?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41516164/

相关文章:

javascript - 当窗口变大时,为什么我的响应式菜单没有重新显示为列表?

python - 显示返回 'Mean of empty slice'的行

c++ - 不正确的矩阵乘法值

python csv 文本文件到数组[i,j]

python Pandas : Aggregate data by hour and display it instead of the index

python - 如何将 JSON 数据转换为 HTML 表格?

函数中的python语法错误

python - Tensorflow 训练期间 GPU 使用率非常低

python - 打印与我要附加到的数组不匹配

c - 将值分配给传递给它的结构时,pthread_create 调用的函数会中断