描述

给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形。

输入
输入第一行是一个整数T(1<=T<=100),代表测试数据的数量。

每组数据包含4行,每行包含4个整数x1, y1, x2, y2 (-100000 <= x1, y1, x2, y2 <= 100000);其中(x1, y1), (x2,y2)代表一条线段的两个端点。

输出
每组数据输出一行YES或者NO,表示输入的4条线段是否恰好围成矩形。
样例输入
3
0 0 0 1
1 0 1 1
0 1 1 1
1 0 0 0
0 1 2 3
1 0 3 2
3 2 2 3
1 0 0 1
0 1 1 0
1 0 2 0
2 0 1 1
1 1 0 1
样例输出
YES
YES
NO
思路:
我是根据矩形的定义来的(1.矩形定义:有一个直角的平行四边形;2.平行四边形定义:两对边平行的四边形),代码注释中有详解。

AC代码:

#include <stdio.h>
#include <algorithm>
using namespace std;
struct node{int x, y, cnt;
}p[8];
int main() {int t, i, j, k;double K[4], max = 1.0/0.0;struct node b[8];scanf("%d", &t);while(t--) {for(i = 0, k = 0; i < 8; i++) {b[i].cnt = 0;scanf("%d%d", &p[i].x, &p[i].y);for(j = 0; j < k; j++) {if(p[i].x == b[j].x && p[i].y == b[j].y) {b[j].cnt++;break;}}if(j == k) {b[k].x = p[i].x;b[k].y = p[i].y;b[k++].cnt++;}if(i%2) K[i/2] = (p[i].y-p[i-1].y+0.0)/(p[i].x-p[i-1].x+0.0);}char fag = 1;if(b[0].cnt!=2||b[1].cnt!=2||b[2].cnt!=2||b[3].cnt!=2) fag = 0;//四条边要构成四边形的话四边形的每个顶点都应该出现两次,否则不是四边形 else {sort(K,K+4);if(K[0] != K[1] || K[2] != K[3]) fag = 0;//判断是否为平行四边形 else {if(K[0]*K[3] != -1) fag = 0;//没有直角则不是矩形 if(K[0]==0&&K[2]==max) fag = 1;//一边斜率为0,一边没有斜率与y轴平行的情况也要考虑 }}if(fag) printf("YES\n");else printf("NO\n");}return 0;
}

nyoj1228矩形判断相关推荐

  1. hihoCoder1040 矩形判断

    #1040 : 矩形判断 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 给出平面上4条线段,判断这4条线段是否恰好围成一个面积大于0的矩形. 输入 输入第一行是一个整数T ...

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

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

  3. HTML矩形与矩形、圆形与圆形、矩形与圆形元素的碰撞判断与动画

    1. 矩形与矩形 判断两个矩形是否碰撞,判断条件:d1Right > d2Left && d1Bottom > d2Top && d1Left < d ...

  4. 判断两个矩形是否有重合部分

    最近在做人工智能项目,需要对两个矩形是否有重合做出判读 但注意的是,不是判断两个检测目标是否重合,检测目标的矩形只要左上角点和右下角点就可表示一个矩形,判断是否重合比较简单,但是现在是两个矩形是有一定 ...

  5. VUE3 实现前台图片标注添加矩形框、图片放大、缩小、鼠标滚轮缩放

    VUE3 实现前台图片标注 功能包括: 鼠标左键拖动添加矩形框标记区域,鼠标点击已绘制的矩形: 选中矩形,并绘制不同选中效果: 鼠标在已绘制的矩形中按住左键拖动,选中并移动矩形:选中矩形后鼠标在选中矩 ...

  6. 原生js实现canvas画布中绘制、移动、拖拽、删除矩形(如简易截图工具)

    功能描述 待图片上传并加载完成后,重新生成画布: 鼠标在画布区域内绘制,移动,拖拽,删除矩形(如截图工具一般): isboundary() 判断是否需要判断边界问题,默认false. 效果截图 实现代 ...

  7. 《计算几何》代码实现:2、最小外包矩形

    最小外包矩形(MBR-Minimum Bounding Rectangle)就是包围图元,且平行于x,y轴的最小外接矩形. 最小外包矩形是一个在GIS(Geographic Information S ...

  8. 850.矩形面积 II 【矩形的分解】

    题解 启发式解法-矩形分解 思路 因为多个矩形重叠部分的面积只需要计算一次,因此可以想到将重叠的多个矩形转化为多个不重叠的矩形,最后通过计算不重叠矩形中所有的矩形面积得到答案. 所需要的前置知识,针对 ...

  9. 使用c++设计矩形类

    矩形类 一.前言 二.带分数的运算 1.头文件(Rectangle.h) 2.源文件(实现函数) 3.源文件(测试函数) 4.运行截图 三.总结 一.前言 为了更深入的学习c++,小编将带领大家一起使 ...

最新文章

  1. GridSearchCV 与 RandomizedSearchCV 调参
  2. 把开机时Ctrl+Alt+Delete取消掉了
  3. 2017年CISCN初赛
  4. Java技巧分享:判断字符串是否为空常的三种方法
  5. python绘图函数返回_python – Matplotlib返回一个绘图对象
  6. 史上最详细的宝塔部署java项目流程
  7. 亲身体验 DDOS(拒绝服务)攻击硬防DIY
  8. 拍拍贷2019Q1财报:核心用户转化率上升 迎战资本竞争力略显不足
  9. DPDK系列之三DPDK介绍及简单应用
  10. git pull 报错 Your local changes would be overwritten by merge. Commit, stash or revert them to procee
  11. npm安装electron时卡死 ,而利用cnpm安装electron时失败(等一系列幺蛾子)
  12. 我在前锋培训的日子第二天
  13. Centos7安装MPICH3在配置安装目录时出现问题
  14. jsMath对象中的三角函数
  15. python 第七周
  16. 用计算机中的知识秀恩爱,自从用专业知识改了情侣名,女友再也不逼我秀恩爱了...
  17. 拨开云雾见月明—计算其实很简单
  18. C++数据结构实验---线性表的基本操作
  19. 五年,他们从应届生成为了滴滴的「技术扛把子」
  20. c语言开发百度地图,百度地图开发(一)

热门文章

  1. Object.wait()与Object.notify()的用法
  2. Linux 被***后的检查
  3. CSS学习笔记(十四) 我们前端是怎么跟设计师沟通的
  4. ccna____总结
  5. JAVA基础知识(6)
  6. MET 3P5: 工业工程
  7. three approaches to industrial experiences at cambridge
  8. student consulting system
  9. 快速读书的方法(对于理工科的可能适用)
  10. ‘xxfile' Missing the class attribute 'ExtensionOfNativeClass'