给定四个点,判断这四个点是否组成一个正方形。
思路
刚拿到这道题的时候首先想着先确定四个点的相对位置,然在看四个边长是否相等,相邻两条边是否垂直。这样的话的确可行 ,但是程序写起来得多麻烦,不确定性太多,比如位置。如何用确定性的属性来进行判断呢,考虑正方形的性质,四条边相等,两条对角线相等,对角线的平方等于两条边的平方。这样一来,问题就解决了,四个点求出六条边的长度,排个序判断下完事。
class Solution:
def validSquare(self, p1, p2, p3, p4):
"""
:type p1: List[int]
:type p2: List[int]
:type p3: List[int]
:type p4: List[int]
:rtype: bool
"""
array = [p1,p2,p3,p4]
edge_length = []
for i in range(len(array)):
for j in range(i+1,len(array)):
edge_length.append(pow(array[i][0]-array[j][0],2)+pow(array[i][1]-array[j][1],2))
# print(edge_length)
edge_length.sort()
return self.check(edge_length)
def check(self,array):
for i in range(4):
if array[i] ==0:
return False
if array[i]!=array[0]:
return False
for i in range(4,len(array)):
if array[i] ==0:
return False
if array[i]!=array[4]:
return False
return array[0]*2 == array[4]