判断四个点是否可以构成矩形(优雅的解法!!!)
首先我们需要先检查输入的四个点是不是有重复。然后判断四个角是不是直角即可。
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/
判断四个点是否可以构成矩形(优雅的解法!!!)相关推荐
- java矩形翻转_如何判断一个点在旋转后的矩形中
前言 最近在做的一款游戏中,用到点与旋转矩形的判定来获得一个选中的物体.在此做个记录 如图所示,黄色的颜料屏是旋转的,如果不做处理直接判断点是否在矩形中,那么点击红点的位置会判定为选中物体.显然这是不 ...
- c语言长和宽判断是否是正方形,C++ 如何判断四个点是否构成正方形
判断方法分为两步: 1.判断四条边是否相等: 2.判断是否有一个角为直角: 求解两点之前距离的函数: double Distance(int x1,int y1,int x2,int y2){ ret ...
- 判断四个点是不是组成正方形
判断四个点是不是组成正方形 给出几组数,每组的第一行为横坐标,第二行为纵坐标.看其是否组成正方形 代码 #coding=utf-8 import sys if __name__ == "__ ...
- C++判断四个点能否构成正方形
参考博客https://blog.csdn.net/yangkunpengD/article/details/51329115 对其进行了修改,思路大致一样. 判断方法:三个条件同时满足(1:四条边相 ...
- C++判断四个点能否构成正方形/矩阵
判断正方形方法:三个条件同时满足(1:四条边相等,2:边不为0,3:有一个直角) 判断矩形的话就是条件1变为有2对边相等 #include<iostream> #include<al ...
- java enum判断_Java Enum枚举 遍历判断 四种方式(包括 Lambda 表达式过滤)
packagecom.miracle.luna.lambda;importjava.util.Arrays;/*** @Author Miracle Luna * @Date 2019/6/9 23: ...
- c语言判断四个坐标点正方形,四个坐标点判断是否为正方形
四个坐标点判断是否为正方形 在做ACM题目的时候,遇到了要求输入四个点的坐标,然后判断这四个点能否构成一个正方形.这个看似很简单,但细节方面还是有许多问题的.我想的方法很容易理解,而且一次就AC了. ...
- 判断四个点是否能构成正方形
代码: #include<iostream> #include<algorithm> #include<cmath> using namespace std;str ...
- [编程]C++判断四个点能否构成正方形
方法一: 判断方法:三个条件同时满足(1:四条边相等,2:边不为0,3:有一个直角) https://blog.csdn.net/qq_29567701/article/details/7967673 ...
- java通过减治法判断四个数能否生成24点问题
思路: 一开始我们随机生成四个数字A.B.C.D,选择其中任意一个数字,暂记为A: 将A和B.C.D进行加减乘除运算,并把结果存储起来: 由于每次都是选择的两张牌,并且最后运算出的结果都是一张牌,所以 ...
最新文章
- ckeditor富文本编辑器的基本配置设置:
- Java的知识点10——static关键字、静态初始化块、 参数传值机制、包、导入类import、 静态导入
- 学会选择最适合自己的GPS定位系统源码
- VBScript 教程之数据库篇
- Kubernetes如何赋能可再生能源产业提升10倍效率
- [C++]实现委托模型
- 求助下 Ubuntu 15.10(64 位)下安装 pyspider 下的问题 - V2EX
- java设计模式适配器模式_Java解释器设计模式
- 一步一步 IText.Sharp 之 Hello Word
- java给mongo数组添加_如何使用具有新值的java在mongodb中的现有集合中追加现有数组...
- VS2019搭建C语言开发环境(图文教程)
- 通过QQ 2012 客户端协议获取clientkey的0x91数据包分析
- Unity-DLL反编译学习
- vue根据获取的文件名显示文件服务器上的图片
- Cocos2d-x 3.2键盘操控列表页的初步实现
- 交乘项专题:主效应项可以忽略吗?
- 什么是连接池,其工作原理是什么?
- Layui动态渲染下拉框
- nyist 1204 魔法少女
- 利用esp8266接入小爱同学,实现智能台灯的改造物联网初识
热门文章
- 独上高楼望尽天涯路;为伊得人憔悴、衣带渐宽终不悔;几处早莺争暖树,乱花渐欲迷人眼;梅先菊后何须较、好似人生各有时;
- win10设置计算机关机时间,w10怎么设置自动关机_win10电脑设置自动关机的方法
- String对象intern方法
- 商业银行的组织结构-决策系统、执行系统和监督系统
- 修改Fedora 18的窗口背景颜色为浅绿色
- 学校毕业论文格式对奇数页页眉和偶数页页眉有要求,遇到问题请教
- Node Express框架快速入门教程
- lua invalid pattern capture
- grunt html模块化管理插件,grunt模块化配置
- 计算机保研面试中,都有哪些令人窒息的问题?