判断四个点是否可以构成矩形(优雅的解法!!!)
生活随笔
收集整理的這篇文章主要介紹了
判断四个点是否可以构成矩形(优雅的解法!!!)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
首先我們需要先檢查輸入的四個點是不是有重復。然后判斷四個角是不是直角即可。
def isOrthogonal(p1, p2, p3):return (p2[0] - p1[0]) * (p2[0] - p3[0]) + (p2[1] - p1[1]) * (p2[1] - p3[1]) == 0def _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)/4x_c=(x_1+x_2+x_3+x_4)/4xc?=(x1?+x2?+x3?+x4?)/4
- yc=(y1+y2+y3+y4)/4y_c=(y_1+y_2+y_3+y_4)/4yc?=(y1?+y2?+y3?+y4?)/4
然后再計算中點到四個點的距離是不是一樣即可。
def dis(p1, p2):return (p1[0] - p2[0])**2 + (p1[1] - p2[1])**2def isRectangle(p1, p2, p3, p4):x_c = (p1[0] + p2[0] + p3[0] + p4[0])/4y_c = (p1[1] + p2[1] + p3[1] + p4[1])/4d1 = 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 == d4reference:
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/
總結
以上是生活随笔為你收集整理的判断四个点是否可以构成矩形(优雅的解法!!!)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UG工程图模板变量
- 下一篇: 中兴手机数据通道打不开_中兴RRU故障排