题目:

1264 线段相交

基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注

给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交)。 如果相交,输出”Yes”,否则输出”No”。

Input

第1行:一个数T,表示输入的测试数量(1 <= T <= 1000)

第2 - T + 1行:每行8个数,x1,y1,x2,y2,x3,y3,x4,y4。(-10^8 <= xi, yi <= 10^8)

(直线1的两个端点为x1,y1 | x2, y2,直线2的两个端点为x3,y3 | x4, y4)

Output

输出共T行,如果相交输出”Yes”,否则输出”No”。

Input示例

2

1 2 2 1 0 0 2 2

-1 1 1 1 0 0 1 -1

Output示例

Yes

No

分析:

在二维中, 对于两个线段相交, 不包括重叠, 端点可以用向量的叉积来判断,
部分重叠, 则说明必有一个点在另一条线段上(不包括端点), 则叉积为0, 点积是 < 0 的;
对于端点重叠的, 判断一下点是否相等就可以了。

实现:

#include <bits/stdc++.h>

using namespace std;

const double eps = 1e-8;
int dcmp(double x) {
return fabs(x) < eps ? 0 : (x < 0 ? -1 : 1);
} struct Point {
double x, y;
Point(double _x = 0, double _y = 0) :\
x(_x), y(_y) {}
}; typedef Point Vector; Vector operator - (Point A, Point B) { return Vector (A.x-B.x, A.y-B.y); }
bool operator == (Point A, Point B) { return dcmp(A.x-B.x) == 0 && dcmp(A.y-B.y) == 0; }
double Dot (Vector A, Vector B) { return A.x*B.x + A.y*B.y; }
double Cross (Vector A, Vector B) { return A.x*B.y - A.y*B.x; }
bool SegmentProperIntersection(Point a1, Point a2, Point b1, Point b2) { ///不包括端点的两线段相交。
double c1 = Cross(a2-a1, b1-a1), c2 = Cross(a2-a1, b2-a1),
c3 = Cross(b2-b1, a1-b1), c4 = Cross(b2-b1, a2-b1);
return dcmp(c1)*dcmp(c2) < 0 && dcmp(c3)*dcmp(c4) < 0;
}
bool PointOnSegment(Point p, Point a1, Point a2) { /// 判断点是否在线段上。
return dcmp(Cross(a1-p, a2-p)) == 0 && dcmp(Dot(a1-p,a2-p)) < 0;
} Point d[4];
int main()
{
int T;
cin >> T;
while(T--) {
for(int i = 0; i < 4; ++i)
cin >> d[i].x >> d[i].y;
int cnt = 0;
cnt += (d[0] == d[2] || d[1] == d[3] || d[0] == d[3] || d[1] == d[2]);
cnt += (PointOnSegment(d[0],d[2],d[3]) || PointOnSegment(d[1],d[2],d[3]));
cnt += SegmentProperIntersection(d[0],d[1],d[2],d[3]);
if(cnt) printf("Yes\n");
else printf("No\n");
}
}

51nod--1264 线段相交 (计算几何基础, 二维)的更多相关文章

  1. 51nod 1264 线段相交(几何)

    题目链接:51nod 1264 线段相交 如果两条线段相交,则需满足一条线段的一个端点在另一条线段上,或者 两条线段都分别跨越另一条线段延伸的直线上.(如果点p1位于直线p3p4的一边,而点p2位于该 ...

  2. 51Nod 1264 线段相交(计算几何)

    1264 线段相交  基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题  收藏  关注 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相 ...

  3. 判断线段相交 -- 51nod 1264 线段相交

    http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264 三角形的有向面积:a.x*b.y+b.x*c.y+c.x*a.y ...

  4. 51nod 1264 线段相交——计算几何

    题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1264 检查点的位置就行了,具体见注释. /* (a-c)×(d-c)*(d ...

  5. 51nod 1264 线段相交

    题目:传送门. 题意:给两条线段,有一个公共点或有部分重合认为相交,问他们是否相交. 题解:这属于非规范相交的情况,模板题. #include <iostream> #include &l ...

  6. (图论)51NOD 1264 线段相交

    给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No".   输入 第1行:一个 ...

  7. OpenJudge计算概论-二维数组右上左下遍历

    /*====================================================================== 二维数组右上左下遍历 总时间限制: 1000ms 内存 ...

  8. 算法模板——线段树6(二维线段树:区域加法+区域求和)(求助phile)

    实现功能——对于一个N×M的方格,1:输入一个区域,将此区域全部值作加法:2:输入一个区域,求此区域全部值的和 其实和一维线段树同理,只是不知道为什么速度比想象的慢那么多,求解释...@acphile ...

  9. CodeForces 242E - XOR on Segment 二维线段树?

    今天练习赛的题....又是线段树的变换..拿到题我就敲了个点更新区间查询的..果断超时...然后想到了可以将每个数与合表示成不进位的二进制数..这样就可以区间进行更新了..比赛的时候写搓了..刚重写了 ...

随机推荐

  1. Nginx 学习笔记(六)引入线程池 性能提升9倍

    原文地址:https://www.cnblogs.com/shitoufengkuang/p/4910333.html 一.前言 1.Nignx版本:1.7.11 以上 2.NGINX采用了异步.事件 ...

  2. c# 三种传参方式 in,out,ref

    in:默认方式,传值不返回 out:不传值 但是会返回新值给予传参对象 ref:传存储地址,所以传参前必须赋值初始化,传值后的运算结果直接作用在传参上 Out和ref的效果差不多

  3. 记录MySQL的一些基础操作

    MySQL建表操作 root@localhost 08:05:22> create table stu( -> id int(4) not null, -> name char(20 ...

  4. redis集群之主从架构

    https://redis.io/topics/replication1. redis主从架构概述(1)一个master可以配置多个slave(2)slave与master之间使用异步复制进行数据同步 ...

  5. C++ vector和list的主要用法区别

    vector可以直接通过下标访问,list不可以 1.vector ; i < userTypes.size(); i++) { str = userTypes[i].typeName; } 2 ...

  6. jQuery漏洞

    1.使用jQuery.append().jQuery.html()方法时,如果其中内容包含<script>脚本而没有经过任何处理的话,会执行它. 2.版本低于1.7的jQuery过滤用户输 ...

  7. C# WinForm开发系列 - Crystal Report水晶报表

    转自:ttp://www.cnblogs.com/peterzb/archive/2009/07/11/1521325.html 水晶报表(Crystal Report)是业内最专业.功能最强的报表系 ...

  8. tensorflow faster rann

    github 上大神的代码 https://github.com/endernewton/tf-faster-rcnn.git 在自己跑的过程中的问题: 1. 数据集的问题: 作者实现了 voc,co ...

  9. Debian Security Advisory(Debian安全报告) DSA-4414-1 libapache2-mod-auth-mellon security update

    Debian Security Advisory(Debian安全报告) DSA-4414-1 libapache2-mod-auth-mellon security update Package:l ...

  10. file图片上传之前先预览

    链接:https://www.cnblogs.com/tandaxia/p/5125275.html 记得以前做网站时,曾经需要实现一个图片上传到服务器前,先预览的功能.当时用html的<inp ...