1.快速排序实验

两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的。快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后接上跨立实验就能完全的判断两线段是否相交,但其实只用跨立实验这一种办法也能作为判断线段相交的充要条件。

判断以这两个点为对角线的矩形和另两个点决定的矩形是否相交

通过快速排斥实验,那么矩形相交

P1坐标为(p1x,p1y),P2坐标为(p2x,p2y),Q1的坐标为(q1x,q1y),Q2的坐标为(q2x,q2y)。

条件:`

min(p1x,p2x) <= max(q1x,q2x) &&
min(q1x,q2x) <= max(p1x,p2x) &&
min(p1y,p2y) <= max(q1y,q2y) &&
min(q1y,q2y) <= max(p1y,p2y);

2.跨立实验

取其中一个向量作为中间向量,中间向量中开始端点作为另外两个向量的起点,判断三个向量之间的位置关系即可:

第一个图中: (ca × cd)(cd × cb) >= 0 我们即可判断满足跨立条件

//顺序不能写错,,,,,,

第二个图中: (bc × ba)(ba × bd) >=0 我们即可判断满足跨立条件

第三个图中: (bc × ba)(ba × bd) < 0不满足跨立条件

第四个图中: (ca × cd)(cd × cb) >= 0我们即可判断满足跨立条件

那么我们就可以知道上面条件就是判断跨立是否成立的条件了,那么这样我们线段是否相交就已经可以解决了.

解释:
向量相乘根据右手定则会确定乘以后的方向,举个例子:ca叉乘cd 与 cd 叉乘 ca 的结果是不一样的,一个为正 一个为负 ,代表着方向(向上以及向下)

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int MAXN = 2100;
struct Point
{double x,y;
}line[MAXN][2];bool Judge(Point &a,Point &b,Point &c,Point &d)
{if(!(min(a.x,b.x)<=max(c.x,d.x) && min(c.y,d.y)<=max(a.y,b.y)&&min(c.x,d.x)<=max(a.x,b.x) && min(a.y,b.y)<=max(c.y,d.y)))return false;double u,v,w,z;u=(c.x-a.x)*(b.y-a.y)-(b.x-a.x)*(c.y-a.y);v=(d.x-a.x)*(b.y-a.y)-(b.x-a.x)*(d.y-a.y);w=(a.x-c.x)*(d.y-c.y)-(d.x-c.x)*(a.y-c.y);z=(b.x-c.x)*(d.y-c.y)-(d.x-c.x)*(b.y-c.y);return (u*v<=0.00000001 && w*z<=0.00000001);
}
int main()
{int n;scanf("%d",&n);int num=0;for(int i = 0;i < n;i ++)scanf("%lf%lf%lf%lf",&line[i][0].x,&line[i][0].y,&line[i][1].x,&line[i][1].y);for(int i = 0;i < n;i ++)for(int j = i+1;j < n;j ++){if(Judge(line[i][0],line[i][1],line[j][0],line[j][1])){num++;//cout<<num<<endl;}}cout<<num<<endl;
}

原文链接:https://blog.csdn.net/flymoyu/article/details/90452598

【计算几何】快速排斥实验和跨立实验相关推荐

  1. caioj1212:【计算几何】判断线段相交(快速排斥判断与跨立实验)

    首先,欢迎大家来访问我老师的OJ:小白菜OJ 你是新入门OI的小白吗? 你正在苦于网上的资料不足吗? 你正在因各种blog写得不清不楚.艰涩难懂.千篇一律.满篇术语像LB一样而烦恼吗? 欢迎来到小白菜 ...

  2. 计算几何——快速排斥实验和跨立实验

    两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的. 也就是说线段不严格相交时可以将端点作为交点,但本文不讨论不严格相交,只讨论严格相交的情况(即使它们在算法实现上 ...

  3. POJ1410线段相交、快速排斥实验、跨立实验

    题目 Intersection 给出二维平面中一条线段和一个矩形,问线段和矩形是否有交点,矩形包括边和内部. 解题思路 先判断线段和四条边是否相交,如果没交点,再继续判断线段是否在矩形内. 判断线段相 ...

  4. 快速排斥实验amp;跨立实验 判断两直线是否相交

    两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的. 也就是说线段不严格相交时可以将端点作为交点,但本文不讨论不严格相交,只讨论严格相交的情况(即使它们在算法实现上 ...

  5. 计算几何--快速排斥实验和跨立实验

    1.快速排序实验 两条线段有且仅有一个公共点,且这个点不是任何一条线段的端点时,称这两条线段是严格相交的.快速排斥实验能很快的排除掉线段不相交的情况,但并没法成为线段相交的充要条件,在快速排斥实验之后 ...

  6. 快速排斥实验和跨立实验

    矢量 如果一条线段的端点是有次序之分的话,那么这种线段就称为 有向线段,如果有向线段p1p2的起点p1在坐标的原点,则可以把它称为矢量p2 矢量的加减 设二维矢量 P = (x1, y1), Q = ...

  7. 【代码超详解】ZOJ 2551 / POJ 2653 Pick-up Sticks(快速排斥实验 + 跨立实验判断线段是否相交 · 模板)

    一.传送门 http://poj.org/problem?id=2653 https://zoj.pintia.cn/problem-sets/91827364500/problems/9182736 ...

  8. POJ - 1269 Intersecting Lines(计算几何 + 叉积 + 跨立实验)

    链接 Intersecting Lines 题意 给出两条线段,判断是否共线,平行,或者相交,如果相交输出交点: 思路 如何判断共线: 我们知道两个向量叉积为 000,两向量共线: 所以我们只需要判断 ...

  9. 计算几何_线段交点的快速排斥_跨立实验

    附上题的地址 https://vjudge.net/problem/HDU-1086# // 点是否在矩形 // 矩形点是 st 和 ed bool IsPointInRectangle(Point ...

最新文章

  1. python美国股票数据api_【美股量化00篇】Python获取新浪接口美股实时数据
  2. Jmeter使用之:高效组织接口自动化用例技巧
  3. SDN控制器是这样工作的
  4. 中国氨纶市场“十四五”规划及未来动态分析报告2021年版
  5. 直接点不玩虚的--启明云端千元现金红包、50pcs开发板直播现场拿走不谢
  6. 华尔街英语学习软件_华尔街英语核心课程功能升级 让学员学习之旅更高效
  7. ListBox的使用
  8. “芯”痛痛在系统与芯片 转型升级是历史趋势
  9. 【数据库原理及应用】经典题库附答案(14章全)——第十二章:数据库技术新发展
  10. excel连接mysql 数据库
  11. java支付管理有源码_java支付宝支付案例源码
  12. Spring Data JPA 从入门到精通~@Procedure 储存过程的查询方法
  13. 支付巨头Visa宣布计划在巴西将加密货币服务引入传统银行
  14. sql语句截断_SQL Server中SQL截断和SQL删除语句之间的区别
  15. java a =a-=aa_java 初学 :求 s=a+aa+aaa+aaaa+aa...a 的值,其中 a 是一个数字。几个 数相加由键盘控制。...
  16. 制作的LINUX安装软件,竟然导致系统无法启动
  17. 《精通开关电源设计》笔记
  18. 如何使用Arduino UNO开发板编程ATtiny85
  19. 基于TI Davinci架构的多核/双核开发高速扫盲(以OMAP L138为例),dm8168多核开发參考以及达芬奇系列资料user guide整理...
  20. Unity FPS显示工具

热门文章

  1. Winform动态增加ComboBox后SelectedValue无效的问题
  2. 15100364杨舒雅
  3. springMVC实现form表单数据+文件提交
  4. java-net-php-python-jsp宠物寄养系统计算机毕业设计程序
  5. Vcastr 2.2 flv 网络播放器使用功能/方法
  6. 嘉应大学黄林鑫计算机学院,终版-【林鑫组】计算机在材料学中的应用综合作业.docx...
  7. 不装了,摊牌了、我们要搞事情
  8. 【学姐面试宝典】前端基础篇Ⅴ——JS深浅拷贝、箭头函数、事件监听等
  9. Cumulus Encrypted Storage System(CESS)激励测试网 v0.6.0 正式上线
  10. systemverilog-覆盖率