判断线段相交 -- 51nod 1264 线段相交
http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264
三角形的有向面积:a.x*b.y+b.x*c.y+c.x*a.y - a.x*c.y - c.x*b.y - b.x*a.y;
上面得到的即是以点A,B,C三点组成的三角形面积的两倍。
如果area >0 则点A,B,C呈逆时针排列。
如果area<0 则点A,B,C呈顺时针排列。
如果area=0 则点A,B,C三点共线。
那么判断线段1(两个端点point a,b),与线段二是否相交(两个端点point c,d) 只要求 a,b,c与a,b,d的有向面积乘积是否小于0 ,并且c,d,a与c,d,b的有向面积是否小于0即可。
只有两线段相交,有向面积才会是一个为正一个为负。画一下图就知道了。
端点相交时乘积等于0。
- #include <cstdio>
- struct point
- {
- double x,y;
- };
- double dir(point a, point b, point c)//三角形有向面积判断顺逆时针
- {
- return a.x*b.y + b.x*c.y + c.x*a.y - a.x*c.y - c.x*b.y - b.x*a.y;
- }
- bool connected(point a, point b, point c, point d)//线段判交
- {
- if (dir(a, b, c)*dir(a, b, d) <= && dir(d, c, a)*dir(d, c, b) <= )return ;//注意在端点处相交时等于0
- return ;
- }
- int main()
- {
- int t;
- point a,b,c,d;
- scanf("%d",&t);
- 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(connected(a,b,c,d)) printf("Yes\n");
- else printf("No\n");
- }
- return ;
- }
判断线段相交 -- 51nod 1264 线段相交的更多相关文章
- 51nod 1264 线段相交(几何)
题目链接:51nod 1264 线段相交 如果两条线段相交,则需满足一条线段的一个端点在另一条线段上,或者 两条线段都分别跨越另一条线段延伸的直线上.(如果点p1位于直线p3p4的一边,而点p2位于该 ...
- 51Nod 1264 线段相交(计算几何)
1264 线段相交 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相 ...
- (图论)51NOD 1264 线段相交
给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". 输入 第1行:一个 ...
- 51nod 1264 线段相交——计算几何
题目链接:http://www.51nod.com/Challenge/Problem.html#!#problemId=1264 检查点的位置就行了,具体见注释. /* (a-c)×(d-c)*(d ...
- 51nod 1264 线段相交
题目:传送门. 题意:给两条线段,有一个公共点或有部分重合认为相交,问他们是否相交. 题解:这属于非规范相交的情况,模板题. #include <iostream> #include &l ...
- 51Nod 1264:线段相交(计算几何)
51Nod 1264:线段相交 Decision 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出&q ...
- (计算几何 线段判交) 51nod1264 线段相交
1264 线段相交 给出平面上两条线段的两个端点,判断这两条线段是否相交(有一个公共点或有部分重合认为相交). 如果相交,输出"Yes",否则输出"No". ...
- 51Nod 1091 线段的重叠(贪心+区间相关,板子题)
1091 线段的重叠 基准时间限制:1 秒 空间限制:131072 KB 分值: 5 难度:1级算法题 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 2 ...
- 51Nod 1091 线段的重叠(贪心+区间相关
1091 线段的重叠 X轴上有N条线段,每条线段包括1个起点和终点.线段的重叠是这样来算的,[10 20]和[12 25]的重叠部分为[12 20]. 给出N条线段的起点和终点,从中选出2条线段,这两 ...
随机推荐
- 802.11 wireless 五
802.11 wireless 5CSMA/CA,采用倒计时的方法,退避的时间(当年时间+duration 为发送时间,每一个帧会有一个duration,这个位叫做duration[n.持续]) PS ...
- Linux - 常用命令行(一)
今天和大家分享一些最基本常用命令行:也是作为新手最应该了解掌握的 ls 命令:用来显示指定工作目录下内容 dir命令:与ls命令一致 cd 命令:变化工作目录 pwd命令:显示用户当前的工作路径,显 ...
- 【BZOJ】【4002】【JLOI2015】有意义的字符串
构造线性递推式+矩阵乘法 题解戳PoPoQQQ 为了自己以后看的方便手打一遍好了>_> 求$( \frac{b+\sqrt{d}}{2} )^n$的整数部分对p取模后的值 其中$b\mod ...
- [工作积累] Google Play Game SDK details
https://developers.google.com/games/services/cpp/api/structgpg_1_1AndroidSupport For apps which targ ...
- Sublime搭建nodejs环境(windows)
1.下载nodejs,并安装ok后,配置好环境变量. 2.下载sublime text3 3.在package install 包中新增node插件(或者直接去SublimeText-Nodejs插件 ...
- smarty模板技术
一.什么是smarty?smarty是一个使用php写出来的模板php模板引擎,它提供了逻辑与外在内容的分离,简单的讲,目的就是要使用php程序员同美工分离,使用的程序员改变程序的逻辑内容不会影响到美 ...
- Android Environment FAQ (Frequently Asked Question)
1.how to find out the Eclipse Version From Eclipse Menu Help ----> About Eclipse It displayed as ...
- BZOJ1821: [JSOI2010]Group 部落划分
这题乍看很吓人,其实就是一个贪心. 每次取最近的两个点所在的块合并,直到只剩下k块,输出答案. /*************************************************** ...
- 异步等待的 Python 协程
现在 Python 已经支持用协程进行异步处理.但最近有建议称添加协程以全面完善 Python 的语言结构,而不是像现在这样把他们作为生成器的一个类型.此外,两个新的关键字---异步(async)和等 ...
- Xamarin for Visual Studio 破解日志
一.相关声明 本文涉及的 Xamarin 系列软件的版权为 Xamarin Inc. 所有 以本文涉及的思路和方法破解的软件,禁止用于商业用途 如无必要,学习和研究时最好以正版为准 团队或土豪等若觉得 ...