51Nod 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
题解:
首先把两端点横纵坐标包围区域不重合的情况排除,剩下的情况用向量叉乘判断两线段是否相交(原理:根据右手定则, ac×ab的方向与ad×ab的方向不一致时c点和d点在ab的两边(同向法),从而符合两线段有交点的条件)
#include<iostream>
#include<string.h>
using namespace std;
struct node{
double x,y;
};
int main()
{
int T;
scanf("%d",&T);
node a,b,c,d;
double acb,adb,cad,cbd;
while(T--)
{
scanf("%lf%lf%lf%lf%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y,&c.x,&c.y,&d.x,&d.y);
if(!(min(a.x,b.x)>max(c.x,d.x)||min(a.y,b.y)>max(c.y,d.y)||max(a.x,b.x)<min(c.x,d.x)||max(a.y,b.y)<min(c.y,d.y)))
{
acb=(c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);//ac×ab(ac.x*ab.y-ab.x*ac.y);
adb=(d.x-a.x)*(b.y-a.y)-(b.x-a.x)*(d.y-a.y);//ad×ac
cad=(a.x-c.x)*(d.y-c.y)-(d.x-c.x)*(a.y-c.y);//ca×cd
cbd=(b.x-c.x)*(d.y-c.y)-(d.x-c.x)*(b.y-c.y);//cb×cd
if(acb*adb<=0&&cad*cbd<=0){//a,b在cd两边且c,d在a,b两边
printf("Yes\n");
continue;
}
}
printf("No\n");
}
return 0;
}
51Nod 1264 线段相交(计算几何)的更多相关文章
- 51nod 1264 线段相交——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1264 检查点的位置就行了,具体见注释. /* (a-c)×(d-c)*(d ...
- 51nod 1264 线段相交(几何)
题目链接:51nod 1264 线段相交 如果两条线段相交,则需满足一条线段的一个端点在另一条线段上,或者 两条线段都分别跨越另一条线段延伸的直线上.(如果点p1位于直线p3p4的一边,而点p2位于该 ...
- 判断线段相交 -- 51nod 1264 线段相交
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264 三角形的有向面积:a.x*b.y+b.x*c.y+c.x*a.y ...
- 51nod 1264 线段相交
题目:传送门. 题意:给两条线段,有一个公共点或有部分重合认为相交,问他们是否相交. 题解:这属于非规范相交的情况,模板题. #include <iostream> #include &l ...
- (图论)51NOD 1264 线段相交
给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". 输入 第1行:一个 ...
- (计算几何 线段判交) 51nod1264 线段相交
1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". ...
- 51nod1264线段相交
1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交, ...
- 51nod--1264 线段相交 (计算几何基础, 二维)
题目: 1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为 ...
- 51Nod 1264:线段相交(计算几何)
51Nod 1264:线段相交 Decision 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出&q ...
随机推荐
- [转] ElasticSearch 常用的查询过滤语句
备忘remark https://www.cnblogs.com/ghj1976/p/5293250.html query 和 filter 的区别请看: http://www.cnblogs.co ...
- k64 datasheet学习笔记11---Port Control and Interrupts (PORT)
1.前言 Port Control and Interrupt (PORT) 模块提供了port control,digital filtering,和外部中断功能 每个pin的大部分功能可被独立配 ...
- Kafka管理工具介绍【转】
Kafka内部提供了许多管理脚本,这些脚本都放在$KAFKA_HOME/bin目录下,而这些类的实现都是放在源码的kafka/core/src/main/scala/kafka/tools/路径下. ...
- win7 vs2012/2013 编译boost 1.55
bjam install stage --toolset=msvc-11.0 --stagedir="C:\Boost\boost_vc_110" link=shared runt ...
- Django-jinjia2的赋值
一 变量 1. 变量的形式是:{{ variable }},当模板引擎碰到变量时,引擎使用变量的值替代变量: 2. 使用“.”能够访问变量的属性: 3. 当模板引擎碰到“.”的时候,查找顺序是: a) ...
- git与eclipse集成之文件回退
1.1. 文件回退 1.1.1. 添加或修改文件回退,选择要回退的文件,右键Overwrite 1.1.2. 删除文件回退 选择要回退的文件,右键Overwrite 文件变 ...
- Spring HibernateTemplate与HibernateDaoSupport对比
HibernateTemplate与HibernateDaoSupport两者都是spring整合hibernate提供的模板技术. 对于保存一个对象,HibernateTemplate需要先配置 配 ...
- $Django 站点:样式--文章--分类文章--文章详情--文章评论点赞--文章评论点赞统计(数据库优化)
<h3>个人站点下的</h3> 知识点 url (r'(?P<username>\w+)/p/(?P<id>\d+)', xiangxi,name='x ...
- UniversalImageLoader(异步加载大量图片)
UniversalImageLoader是用于加载图片的一个开源项目,UniversalImageLoader是实现异步加载大量图片的源码和例子,包括缓存.硬盘缓存.容错机制等技术.在其项目介绍中是这 ...
- CentOS入门
1.因修改/etc/sudoers权限导致sudo和su不能使用问题 https://blog.csdn.net/u014029448/article/details/80944380 2.给用户分配 ...