51node1264(判断线段相交)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1264
题意:中文题诶~
思路:对于直线a1a2, b1b2,我们可以通过跨立实验判断其是否相交(通过计算斜率也可以啦,不过好像有点麻烦);
其公式为:s=((向量)a1a2叉乘a1b1)*(a1a2)叉乘a1b2),若 s <=0 ,则有点b1, b2分别在线段a1a2的两边或者在同一条直线上;
我们可以很直观的知道如果a1, b2分别位于b1b2两边并且b1, b2分别位于a1a2两边,那么a1a2, b1b2一定相交;
所以我们之要通过两次跨立实验即可判断两直线是否相交,不过还要判断一下a1a2, b1b2处于同一条直线上的情况(我们前面说了跨立实验不能判断两直线是否位于同一条直线上嘛);
对于这点我们可以通过快速排斥实验解决啦;
代码:
#include <bits/stdc++.h>
using namespace std; struct node{
double x, y;
}; double determinant(node a1, node a2, node b){ //用行列式计算有向面积
double x1=a1.x-a2.x, x2=a1.x-b.x, y1=a1.y-a2.y, y2=a1.y-b.y;
return x1*y2-y1*x2;
} bool is_intersect(node a1, node a2, node b1, node b2){
if(max(a1.x, a2.x)<min(b1.x, b2.x)||max(b1.x, b2.x)<min(a1.x, a2.x)){ //快速排斥实验
return false;
}else if(max(a1.y, a2.y)<min(b1.y, b2.y)||max(b1.y, b2.y)<min(a1.y, a2.y)){
return false;
}
if(determinant(a1, a2, b1)*determinant(a1, a2, b2)>){ //跨立实验
return false;
}else if(determinant(b1, b2, a1)*determinant(b1, b2, a2)>){
return false;
}
return true;
} int main(void){
int t;
scanf("%d", &t);
while(t--){
node a1, a2, b1, b2;
scanf("%lf%lf%lf%lf%lf%lf%lf%lf", &a1.x, &a1.y, &a2.x, &a2.y, &b1.x, &b1.y, &b2.x, &b2.y);
if(is_intersect(a1, a2, b1, b2)){
printf("Yes\n");
}else{
printf("No\n");
}
}
return ;
}
51node1264(判断线段相交)的更多相关文章
- 还记得高中的向量吗?leetcode 335. Self Crossing(判断线段相交)
传统解法 题目来自 leetcode 335. Self Crossing. 题意非常简单,有一个点,一开始位于 (0, 0) 位置,然后有规律地往上,左,下,右方向移动一定的距离,判断是否会相交(s ...
- 【POJ 2653】Pick-up sticks 判断线段相交
一定要注意位运算的优先级!!!我被这个卡了好久 判断线段相交模板题. 叉积,点积,规范相交,非规范相交的简单模板 用了“链表”优化之后还是$O(n^2)$的暴力,可是为什么能过$10^5$的数据? # ...
- POJ 2653 Pick-up sticks(判断线段相交)
Pick-up sticks Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 7699 Accepted: 2843 De ...
- 判断线段相交(hdu1558 Segment set 线段相交+并查集)
先说一下题目大意:给定一些线段,这些线段顺序编号,这时候如果两条线段相交,则把他们加入到一个集合中,问给定一个线段序号,求在此集合中有多少条线段. 这个题的难度在于怎么判断线段相交,判断玩相交之后就是 ...
- hdu 1086(判断线段相交)
传送门:You can Solve a Geometry Problem too 题意:给n条线段,判断相交的点数. 分析:判断线段相交模板题,快速排斥实验原理就是每条线段代表的向量和该线段的一个端点 ...
- POJ_1066_Treasure Hunt_判断线段相交
POJ_1066_Treasure Hunt_判断线段相交 Description Archeologists from the Antiquities and Curios Museum (ACM) ...
- POJ_2653_Pick-up sticks_判断线段相交
POJ_2653_Pick-up sticks_判断线段相交 Description Stan has n sticks of various length. He throws them one a ...
- POJ_1556_The Doors_判断线段相交+最短路
POJ_1556_The Doors_判断线段相交+最短路 Description You are to find the length of the shortest path through a ...
- POJ 1066--Treasure Hunt(判断线段相交)
Treasure Hunt Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 7857 Accepted: 3247 Des ...
随机推荐
- 谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles
在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Re ...
- 2016福州大学软件工程第三次个人作业-K米软件产品评测
K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...
- docker develop django
$ docker pull django $ docker run -it -v $(pwd):/usr/src/app -p 8000:8000 django /bin/bash
- Matlab插值函数
x=0:2*pi; y=sin(x); xx=0:0.5:2*pi; %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx) ...
- BootLoader的架构设计
@注:黄色部分代表根据不同的开发板进行处理.
- webApp开发
1.Viewport:视口屏幕,可以操作的属性如下: width //viewport的宽度,范围从200-10000,默认为980像素 height //viewport的高度 initial-sc ...
- MVC CheckBoxList的实现
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...
- .NET Framework(.config)的配置文件架构
配置文件是标准的XML文件..NET Framework定义了一组实现配置设置的元素.本节描述计算机配置文件.应用程序配置文件和安全配置文件的配置架构.如果希望直接编辑配置文件,您需要熟悉XML.XM ...
- Androidstudio预览时出现错误java.lang.NoClassDefFoundError: com/android/util/PropertiesMap
参考博客;http://blog.csdn.net/daqi1983/article/details/51474588 更改对应版本的SDK即可.
- WinForm与WPF下跨线程调用控件
Winform下: public delegate void UpadataTextCallBack(string str,TextBox text); public void UpadtaText( ...