首先我们需要先检查输入的四个点是不是有重复。然后判断四个角是不是直角即可。

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 == 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/

判断四个点是否可以构成矩形(优雅的解法!!!)相关推荐

  1. java矩形翻转_如何判断一个点在旋转后的矩形中

    前言 最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体.在此做个记录 如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体.显然这是不 ...

  2. c语言长和宽判断是否是正方形,C++ 如何判断四个点是否构成正方形

    判断方法分为两步: 1.判断四条边是否相等: 2.判断是否有一个角为直角: 求解两点之前距离的函数: double Distance(int x1,int y1,int x2,int y2){ ret ...

  3. 判断四个点是不是组成正方形

    判断四个点是不是组成正方形 给出几组数,每组的第一行为横坐标,第二行为纵坐标.看其是否组成正方形 代码 #coding=utf-8 import sys if __name__ == "__ ...

  4. C++判断四个点能否构成正方形

    参考博客https://blog.csdn.net/yangkunpengD/article/details/51329115 对其进行了修改,思路大致一样. 判断方法:三个条件同时满足(1:四条边相 ...

  5. C++判断四个点能否构成正方形/矩阵

    判断正方形方法:三个条件同时满足(1:四条边相等,2:边不为0,3:有一个直角) 判断矩形的话就是条件1变为有2对边相等 #include<iostream> #include<al ...

  6. java enum判断_Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)

    packagecom.miracle.luna.lambda;importjava.util.Arrays;/*** @Author Miracle Luna * @Date 2019/6/9 23: ...

  7. c语言判断四个坐标点正方形,四个坐标点判断是否为正方形

    四个坐标点判断是否为正方形 在做ACM题目的时候,遇到了要求输入四个点的坐标,然后判断这四个点能否构成一个正方形.这个看似很简单,但细节方面还是有许多问题的.我想的方法很容易理解,而且一次就AC了. ...

  8. 判断四个点是否能构成正方形

    代码: #include<iostream> #include<algorithm> #include<cmath> using namespace std;str ...

  9. [编程]C++判断四个点能否构成正方形

    方法一: 判断方法:三个条件同时满足(1:四条边相等,2:边不为0,3:有一个直角) https://blog.csdn.net/qq_29567701/article/details/7967673 ...

  10. java通过减治法判断四个数能否生成24点问题

    思路: 一开始我们随机生成四个数字A.B.C.D,选择其中任意一个数字,暂记为A: 将A和B.C.D进行加减乘除运算,并把结果存储起来: 由于每次都是选择的两张牌,并且最后运算出的结果都是一张牌,所以 ...

最新文章

  1. ckeditor富文本编辑器的基本配置设置:
  2. Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入
  3. 学会选择最适合自己的GPS定位系统源码
  4. VBScript 教程之数据库篇
  5. Kubernetes如何赋能可再生能源产业提升10倍效率
  6. [C++]实现委托模型
  7. 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX
  8. java设计模式适配器模式_Java解释器设计模式
  9. 一步一步 IText.Sharp 之 Hello Word
  10. java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...
  11. VS2019搭建C语言开发环境(图文教程)
  12. 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
  13. Unity-DLL反编译学习
  14. vue根据获取的文件名显示文件服务器上的图片
  15. Cocos2d-x 3.2键盘操控列表页的初步实现
  16. 交乘项专题:主效应项可以忽略吗?
  17. 什么是连接池,其工作原理是什么?
  18. Layui动态渲染下拉框
  19. nyist 1204 魔法少女
  20. 利用esp8266接入小爱同学,实现智能台灯的改造物联网初识

热门文章

  1. 独上高楼望尽天涯路;为伊得人憔悴、衣带渐宽终不悔;几处早莺争暖树,乱花渐欲迷人眼;梅先菊后何须较、好似人生各有时;
  2. win10设置计算机关机时间,w10怎么设置自动关机_win10电脑设置自动关机的方法
  3. String对象intern方法
  4. 商业银行的组织结构-决策系统、执行系统和监督系统
  5. 修改Fedora 18的窗口背景颜色为浅绿色
  6. 学校毕业论文格式对奇数页页眉和偶数页页眉有要求,遇到问题请教
  7. Node Express框架快速入门教程
  8. lua invalid pattern capture
  9. grunt html模块化管理插件,grunt模块化配置
  10. 计算机保研面试中,都有哪些令人窒息的问题?