题目链接: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(判断线段相交)的更多相关文章

  1. 还记得高中的向量吗?leetcode 335. Self Crossing(判断线段相交)

    传统解法 题目来自 leetcode 335. Self Crossing. 题意非常简单,有一个点,一开始位于 (0, 0) 位置,然后有规律地往上,左,下,右方向移动一定的距离,判断是否会相交(s ...

  2. 【POJ 2653】Pick-up sticks 判断线段相交

    一定要注意位运算的优先级!!!我被这个卡了好久 判断线段相交模板题. 叉积,点积,规范相交,非规范相交的简单模板 用了“链表”优化之后还是$O(n^2)$的暴力,可是为什么能过$10^5$的数据? # ...

  3. POJ 2653 Pick-up sticks(判断线段相交)

    Pick-up sticks Time Limit: 3000MS   Memory Limit: 65536K Total Submissions: 7699   Accepted: 2843 De ...

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

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

  5. hdu 1086(判断线段相交)

    传送门:You can Solve a Geometry Problem too 题意:给n条线段,判断相交的点数. 分析:判断线段相交模板题,快速排斥实验原理就是每条线段代表的向量和该线段的一个端点 ...

  6. POJ_1066_Treasure Hunt_判断线段相交

    POJ_1066_Treasure Hunt_判断线段相交 Description Archeologists from the Antiquities and Curios Museum (ACM) ...

  7. POJ_2653_Pick-up sticks_判断线段相交

    POJ_2653_Pick-up sticks_判断线段相交 Description Stan has n sticks of various length. He throws them one a ...

  8. POJ_1556_The Doors_判断线段相交+最短路

    POJ_1556_The Doors_判断线段相交+最短路 Description You are to find the length of the shortest path through a ...

  9. POJ 1066--Treasure Hunt(判断线段相交)

    Treasure Hunt Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7857   Accepted: 3247 Des ...

随机推荐

  1. 谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles

    在Mac下做开发,用Fiddler抓包由于离不开Windows比较痛苦,还好有Charles,到官网http://www.charlesproxy.com/可下载到最新版本(若不支持rMBP可拖到Re ...

  2. 2016福州大学软件工程第三次个人作业-K米软件产品评测

    K米软件测评个人作业结果统计如下: 评分标准: 按照栋哥布置的第三次个人作业--K米测评制定评分标准如下: 第一部分:调研.评测 下载并使用,描述最简单直观的个人第一次上手体验. 0.5 按照描述的b ...

  3. docker develop django

    $ docker pull django $ docker run -it -v $(pwd):/usr/src/app -p 8000:8000 django /bin/bash

  4. Matlab插值函数

    x=0:2*pi; y=sin(x); xx=0:0.5:2*pi; %interp1对sin函数进行分段线性插值,调用interp1的时候,默认的是分段线性插值 y1=interp1(x,y,xx) ...

  5. BootLoader的架构设计

    @注:黄色部分代表根据不同的开发板进行处理.

  6. webApp开发

    1.Viewport:视口屏幕,可以操作的属性如下: width //viewport的宽度,范围从200-10000,默认为980像素 height //viewport的高度 initial-sc ...

  7. MVC CheckBoxList的实现

    using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; us ...

  8. .NET Framework(.config)的配置文件架构

    配置文件是标准的XML文件..NET Framework定义了一组实现配置设置的元素.本节描述计算机配置文件.应用程序配置文件和安全配置文件的配置架构.如果希望直接编辑配置文件,您需要熟悉XML.XM ...

  9. Androidstudio预览时出现错误java.lang.NoClassDefFoundError: com/android/util/PropertiesMap

    参考博客;http://blog.csdn.net/daqi1983/article/details/51474588 更改对应版本的SDK即可.

  10. WinForm与WPF下跨线程调用控件

    Winform下: public delegate void UpadataTextCallBack(string str,TextBox text); public void UpadtaText( ...