哈理工OJ 1559 线段相交(计算几何)
来源:互联网 发布:淘宝运作流程 编辑:程序博客网 时间:2024/06/05 02:47
http://acm.hrbust.edu.cn/index.php?m=ProblemSet&a=showProblem&problem_id=1559
线段相交
Time Limit: 1000 MS Memory Limit: 10240 K
Total Submit: 211(79 users) Total Accepted: 98(72 users) Rating: Special Judge: No
Description
给定线段P1P2(P1和P2是线段的两端点,且不重合)、P3P4(P3和P4是线段的两端点,且不重合),判断P1P2和P3P4是否相交。P1P2和P3P4相交,即指存在一个点P,它既落在P1P2上又落在P3P4上(含线段的端点)。
Input
输入数据有多组,第一行为测试数据的组数N,下面包括2N行,每组测试数据含2行,第一行为P1P2的坐标值,第二行为P3P4的坐标值,比如下面的数据
表示P1、P2、P3、P4的坐标分别为:P1(0,0),P2(1,1),P3(2,2),P4(3,3)
Output
判断每组数据中的线段P1P2和P3P4是否相交,如果相交输出YES,否则输出NO。每组数据输出占一行。
Sample Input
2
0 0 1 1
2 2 3 3
0 0 2 0
0 0 1 3
Sample Output
NO
YES
Hint
两线段相交分为“规范相交”和“非规范相交”。 “规范相交”指的是两条线段恰有唯一一个不是端点的公共点;而如果一条线段的一个端点在另一条线段上,或者两条线段部分重合,则视为“非规范相交”,本题是“非规范相交”。
定义点坐标类型时需用double
本题算是一个计算几何的小知识点吧,学会了怎么判断两个线段是不是相交,那么问题来了,是怎么判断的呢?这个问题高中生来了就可以帮我们解决了,高中我们学过怎么判断一条线段与直线是否相交,然后就很简单了
下面是AC代码:
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;struct point{ double x,y;} a,b,c,d;bool judge(point a,point b,point c,point d){ double k=(d.y-c.y)/(d.x-c.x);//直线cd的斜率 double cc=(d.y-k*d.x);//直线cd表达式中的常数 double fa=k*a.x+cc-a.y; double fb=k*b.x+cc-b.y; if(fa*fb>0) { return false; } else if(fa==0&&fb!=0) { return true; } else if(fa!=0&&fb==0) return true; else { return true; }}bool judgeline(point a,point b,point c,point d){ if(judge(a,b,c,d)==true) { if(judge(c,d,a,b)==true) { return true; } } return false;}int main(){ int t; scanf("%d",&t); while(t--) { scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y); scanf("%lf%lf%lf%lf",&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)||min(c.x,d.x)>max(a.x,b.x)||min(c.y,d.y)>max(a.y,b.y)) { printf("NO\n"); continue; } bool re=judgeline(a,b,c,d); if(re==true) { printf("YES\n"); } else { printf("NO\n"); } } return 0;}
- 哈理工OJ 1559 线段相交(计算几何)
- 哈理工 1559 线段相交【计算几何】
- 哈理工OJ 1579 又见线段相交【计算几何】
- 【计算几何】线段相交
- 计算几何:线段相交(迷宫寻宝)
- 计算几何----判断线段相交(一)
- 计算几何---判断线段相交(二)
- poj 3565(计算几何,线段相交)
- 1264 线段相交(几何计算)
- 1264 线段相交(计算几何)
- nod1264 线段相交(计算几何)
- poj1039(计算几何)线段相交
- 【计算几何】判断线段相交
- 计算几何 线段相交 模板
- hrbust 哈理工oj 1729 Finding the Way【计算几何】
- POJ 3304 Segments(计算几何:直线与线段相交)
- poj 1269 Intersecting Lines(计算几何:线段相交)
- 土地划分(计算几何——线段相交)
- 1088. Rational Arithmetic (20)
- 微信硬件平台从入门到精通(服务器端)
- LeetCode-127.Word Ladder
- HBase安装
- js-DOM总结
- 哈理工OJ 1559 线段相交(计算几何)
- JQuerySelectors
- 在androidMainfest.xml文件中在此Activity中写入 android:windowSoftInputMode="adjustPan" 可以让界面不被弹出的键盘挤上去。
- 深入理解Java的接口和抽象类
- Linux下出现No module named ..的原因
- 青蛙的约会<数论,extgcd>
- scala笔记(一)
- angular js知识总结
- android网络框架