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

输入

第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)

输出

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

输入样例

2
1 2 2 1 0 0 2 2
-1 1 1 1 0 0 1 -1

输出样例

Yes
No解:方法一(函数):  已知两点,故可以求得两点所在直线方程Ax+By+C=0。  Ax1+By1=Ax2+By2----->A=k(y2-y1);B=k(x1-x2);C=k(x2y1-x1y2);  另两点位置不应位于直线同侧(四点共线需特殊判断)。  将另两点坐标分别带入方程,比较结果与零的关系,可以判断两点与直线的相对位置关系。  (其实写这道题最大的收获是对于?:运算符的使用有了更多的理解)
 1 #include <stdio.h>
 2
 3 long long num[8];
 4 int cfun()
 5 {
 6     long long a, b, c, fg1, fg2;
 7     a = num[0] - num[2];
 8     b = num[3] - num[1];
 9     c = num[1] * num[2] - num[0] * num[3];
10     fg1 = a * num[5] + b * num[4] + c > 0 ? 1 : a * num[5] + b * num[4] + c == 0 ? 0 : -1;///
11     fg2 = a * num[7] + b * num[6] + c > 0 ? 1 : a * num[7] + b * num[6] + c == 0 ? 0 : -1;
12     if (fg1 * fg2 > 0) return 0;
13     else if (0 == (fg1 | fg2))//不加这段if判断也可以ac,但其实程序并没有对于四点一线特殊情况的判断。
14     {
15         int max[2], min[2];
16         max[0] = num[0] > num[2] ? (min[0] = num[2], num[0]) : (min[0] = num[0], num[2]);///
17         max[1] = num[4] > num[6] ? (min[1] = num[6], num[4]) : (min[1] = num[4], num[6]);
18         if (max[0] < min[1] || max[1] < min[0]) return 0;
19         else return 1;
20     }
21     a = num[4] - num[6];
22     b = num[7] - num[5];
23     c = num[6] * num[5] - num[4] * num[7];
24     fg1 = a * num[1] + b * num[0] + c > 0 ? 1 : -1;
25     fg2 = a * num[3] + b * num[2] + c > 0 ? 1 : -1;
26     if (fg1 * fg2 > 0) return 0;
27     return 1;
28 }
29
30 int main()
31 {
32     int t;
33     while (scanf_s("%d", &t) != EOF)
34     {
35         //FILE *fp;
36         //fopen_s(&fp, "a.txt", "w" );
37         while (t--)
38         {
39             scanf_s("%lld%lld%lld%lld%lld%lld%lld%lld", &num[0], &num[1], &num[2], &num[3], &num[4], &num[5], &num[6], &num[7]);
40             fprintf(stdout,"%s\n", cfun() > 0 ? "Yes": "No");
41         }
42         //fclose(fp);
43     }
44     return 0;
45 }

方法二(向量):

  从网上看到的做法,简单的说就是通过两个实验

  1.快速排斥实验(判断以两点为对角线的矩形的重合情况)

  2.跨立实验(判断两点连线与另两点的相对位置关系【进行两次】)

  从而得出答案。

其实两种方法殊途同归,从数学的角度可以借此看出一些一次函数和向量的关系。

转载于:https://www.cnblogs.com/Ekalos-blog/p/10049339.html

(图论)51NOD 1264 线段相交相关推荐

  1. 51nod 1264 线段相交(跨立实验)

    51nod1264:线段相交 判断线段相交: 关于快速排斥和跨立实验的博客:https://blog.csdn.net/li1615882553/article/details/80372202 在快 ...

  2. poj3304(线段相交问题)

    题意:是否存在这样一条直线,使这条直线和所有的线段相交. #include<iostream> #include<algorithm> #include<cstring& ...

  3. poj1410(线段相交问题判断)

    题意:给一个线段的两个端点坐标(确定线段),再给一个矩形的左上角的坐标和右下角的坐标(确定矩形),问判断该线段是否和矩形相交,在矩形内也算和矩形相交.直接用线段和矩形的四条边判断是否相交即可. #in ...

  4. 简单几何(线段相交+最短路) POJ 1556 The Doors

    题目传送门 题意:从(0, 5)走到(10, 5),中间有一些门,走的路是直线,问最短的距离 分析:关键是建图,可以保存所有的点,两点连通的条件是线段和中间的线段都不相交,建立有向图,然后用Dijks ...

  5. 叉乘(三)——线段与线段相交吗?

    用途3: 我们现在的任务就是判断线段P1P2和线段Q1Q2是否相交. 我们分两步确定两条线段是否相交: (1)快速排斥试验 设以线段 P1P2 为对角线的矩形为R, 设以线段 Q1Q2 为对角线的矩形 ...

  6. hdu 1558(线段相交+并查集)

    题意:给你一些操作,P后边输入四个值,分别代表一条线段的起点.终点坐标,当输入Q时,后边输入一个整形值K,输出第k条线段所在的集合中包含的线段的个数. 解题思路:线段相交+并查集,sum[i]表示i所 ...

  7. POJ 2653 Pick-up sticks (线段相交)

    题意:给你n条线段依次放到二维平面上,问最后有哪些没与前面的线段相交,即它是顶上的线段 题解:数据弱,正向纯模拟可过 但是有一个陷阱:如果我们从后面向前枚举,找与前面哪些相交,再删除前面那些相交的线段 ...

  8. 判断线段相交(hdu1558 Segment set 线段相交+并查集)

    先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...

  9. 几何基础之判断线段相交问题

    1.判断两线段相交 只要判断q1,q2在线段s1s2的两侧和s1,s2在线段q1q2的两侧. q1s1q2s1>0就是在两侧. 2.矩形里有n条直线,一条直线的终点是另一条直线的起点.问矩形被分 ...

最新文章

  1. mysql error number 1130,[转]mysql error number 1130的解决方法
  2. 数据库access和mysql_数据库access和MYSQL有什么区别?
  3. Android开发小知识点(二)
  4. 微信开发之 二维码生成类库
  5. NumPy学习_00 ndarray的创建
  6. Scala与Java差异(四)之数组操作
  7. .idea文件夹是做什么的_33 个 IDEA 最牛配置,写代码太爽了!
  8. MobileNet V2简单总结
  9. 9:34 2009-7-28
  10. 李飞飞组开源大型室内场景的模拟环境iGibson
  11. python在匿名函数作和_python之路——内置函数和匿名函数
  12. cad 打开硬件加速卡_CAD画图卡顿?电脑带不动?4个简单实用的方法,解决CAD运行卡顿问题...
  13. ai人工智能的本质和未来_人工智能简介:这就是未来
  14. ajax异步下载文件并判断状态
  15. 易语言php使用次数,易语言统计重复数教学
  16. 创建企业级地理数据库
  17. 小学计算机说课稿模板,获奖小学信息技术说课稿模板
  18. matlab实现二元函数BP网络,m文件实现bp神经网络逼近二元函数
  19. pandas 行列转换
  20. spdep | 如何在R语言中计算空间自相关指数

热门文章

  1. condition_variable的怪事
  2. silverlight数据绑定
  3. Decision Tree决策树练习题
  4. php省城联动_thinkPHP实现的省市区三级联动功能示例
  5. python提取数组元素_python简单获取数组元素个数的方法
  6. qlineedit 设置界面不能输入_一个类似QQ的登陆界面为什么两个输入QLineEdit的上下距离太远...
  7. 华为鸿蒙全程,华为2020年全线启用鸿蒙系统
  8. python中类的使用_Python第九课-使用 类(class)创造新的数据类型!
  9. hive与hbase的联系与区别
  10. 萌宠NFT将于4月16日正式上线