四个点
首先我们需要先检查输入的四个点是不是有重复。然后判断四个角是不是直角即可。
def isOrthogonal(p1, p2, p3):
return (p2[0] - p1[0]) * (p2[0] - p3[0]) + (p2[1] - p1[1]) * (p2[1] - p3[1]) == 0
def _isRectangle(p1, p2, p3, p4):
return self.isOrthogonal(p1, p2, p3) and self.isOrthogonal(p2, p3, p4) and self.isOrthogonal(p3, p4, p1)
def isRectangle(p1, p2, p3, p4):
return self._isRectangle(p1, p2, p3, p4) or self._isRectangle(p2, p3, p1, p4) or self._isRectangle(p1, p3, p2, p4)
一个更加巧妙地回答,我们可以先计算中点的位置
- xc=(x1+x2+x3+x4)/4
- yc=(y1+y2+y3+y4)/4
然后再计算中点到四个点的距离是不是一样即可。
def dis(p1, p2):
return (p1[0] - p2[0])**2 + (p1[1] - p2[1])**2
def isRectangle(p1, p2, p3, p4):
x_c = (p1[0] + p2[0] + p3[0] + p4[0])/4
y_c = (p1[1] + p2[1] + p3[1] + p4[1])/4
d1 = dis(p1, (x_c,y_c))
d2 = dis(p2, (x_c,y_c))
d3 = dis(p3, (x_c,y_c))
d4 = dis(p4, (x_c,y_c))
return d1 == d2 and d1 == d3 and d1 == d4
reference:
https://stackoverflow.com/questions/2303278/find-if-4-points-on-a-plane-form-a-rectangle
https://www.geeksforgeeks.org/check-given-four-points-form-square/
相关阅读
在判断文件打开成功与否或是连续从流中读取数据时,就要用到对流对像的操作,比如 if(!cin) 或是 whie(cin) 。对于 while(cin>>val),c
矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果有向
举一个非常普遍的例子,现在的大学生兼职中是不是有非常多的去做家教老师的呢?所以,大学生去兼职做老师是有这个资本的。对于现在的
1、概述 在计算机系统中,数据都是以字节进行存储的,每个地址单元对应一个字节,每个字节都是8位(bit)。但是C++除了char和bool之外,还有
作为产品经理,平时的工作其实是有点繁杂的,这就导致了很多产品经理缺少足够的时间去沉淀过去,因此趁着新年伊始工作还没有全面展开的