计算几何基础知识总结
文章目录
- 计算几何概念
- 向量的基本运算
- 向量概念
- 向量加法
- 向量减法
- 向量叉积
- 如何判断位置关系
- 判断点是否在线段上
- 判断线段和线段是否相交
- 判断直线和线段是否相交
- 多边形面积
- 凸包
- 凸包概念
- 凸包算法
- Andrew算法
- Graham算法
- 旋转卡壳
- 判断点和线段是否在多边形内
计算几何概念
计算几何研究的对象是几何图形,早期人们对于图像的研究一般都是先建立坐标系,把图形转换成函数,然后用插值和逼近的数学方法,特别是用样条函数作为工具来分析图形。——百度百科
向量的基本运算
向量概念
在数学中,向量指具有大小和方向的量。
向量可以在坐标系内进行运算。
向量加法
设向量∣OP∣|OP|∣OP∣为(x1,y1)(x_1,y_1)(x1,y1),∣OQ∣|OQ|∣OQ∣为(x2,y2)(x_2,y_2)(x2,y2),则∣OP∣+∣OQ∣=(x1+x2,y1+y2)|OP|+|OQ|=(x_1+x_2,y_1+y_2)∣OP∣+∣OQ∣=(x1+x2,y1+y2)
向量减法
设法同上,则∣OP∣−∣OQ∣=(x1−x2,y1−y2)|OP|-|OQ|=(x_1-x_2,y_1-y_2)∣OP∣−∣OQ∣=(x1−x2,y1−y2)
向量叉积
设法同上,则它们两叉积的大小∣OP∣×∣OQ∣=x1y2−x2y1|OP|×|OQ|=x_1y_2-x_2y_1∣OP∣×∣OQ∣=x1y2−x2y1
其中叉积的几何意义为两向量通过平行构成平行四边形的面积(可能为负数)
如何判断位置关系
快速排斥实验:判断线段构成的矩形是否交
跨立实验:判断两点是否在线段的两端
快速排斥实验code:
double js(abc p1, abc p2, abc p3)
{return (p1.x-p3.x)*(p2.y-p3.y)-(p1.y-p3.y)*(p2.x-p3.x);
}
bool online(abc p1, abc p2, abc p3)
{if(p3.x>=min(p1.x, p2.x)&&p3.x<=max(p1.x, p2.x)&&p3.y>=min(p1.y, p2.y)&&p3.y<=max(p1.y, p2.y))return 1;else return 0;
}
跨立实验code:
bool check(abc p1, abc p2, abc p3, abc p4)
{if(js(p3, p4, p1)*js(p3, p4, p2)<0&&js(p1, p2, p3)*js(p1, p2, p4)<0)return 1;else if(js(p3, p4, p1)==0&&online(p3, p4, p1))return 1;else if(js(p3, p4, p2)==0&&online(p3, p4, p2))return 1;else if(js(p1, p2, p3)==0&&online(p1, p2, p3))return 1;else if(js(p1, p2, p4)==0&&online(p1, p2, p4))return 1;return 0;
}
判断点是否在线段上
设线段∣OP∣|OP|∣OP∣,点QQQ,则如果∣OQ∣×∣OP∣=0|OQ|×|OP|=0∣OQ∣×∣OP∣=0,且满足快速排斥实验,则点QQQ在线段OPOPOP上
判断线段和线段是否相交
设线段Q1Q2,P1P2Q1Q2,P1P2Q1Q2,P1P2,则如果满足(P1−Q1)×(P2−Q1)∗(P1−Q2)×(P2−Q2)<0(P1-Q1)×(P2-Q1)*(P1-Q2)×(P2-Q2)<0(P1−Q1)×(P2−Q1)∗(P1−Q2)×(P2−Q2)<0,那么线段P1P2P1P2P1P2跨立Q1Q2Q1Q2Q1Q2
特殊的,如果交点为线段端点,则满足点是否在线段上则相交
判断直线和线段是否相交
则只需要判断线段是否跨立直线即可
code:
double js(abc p1, abc p2, abc p3)
{return (p2.x-p1.x)*(p3.y-p1.y)-(p2.y-p1.y)*(p3.x-p1.x);
}
bool check(abc p1, abc p2, abc p3, abc p4)
{if(js(p1, p3, p2)*js(p1, p2, p4)>=0)return 1;return 0;
}
多边形面积
将多边形上点一一连起构成三角形,通过叉积算出每个三角形面积,然后相加
凸包
凸包概念
在平面内能把所有点围起来的周长最小的多边形
凸包算法
Andrew算法
先选出凸包上必定存在的一点,按照级角大小排序,模拟一条直线将凸包上的点一一算出。(由于电脑不能模拟直线旋转,则直接按照级角坐标排序后来选择)
code:(暂无)
Graham算法
同样选出凸包上一点,按照级角坐标排序,一一遍历点,通过判断旋转方向是否发生改变,用单调栈存储所有凸包上的点
code:
sort(p+2, p+1+n, cmp);
s[1]=1, top=1;
for(long long i=2; i<=n; i++)
{while(top>1&&cj(p[s[top-1]].x, p[s[top-1]].y, [s[top]].x, p[s[top]].y, p[i].x, p[i].y)<=0)top--;s[++top]=i;
}
旋转卡壳
选取凸包上一边,再在此凸包上选出与之构成三角形面积最大的一点,做此边的平行线穿过此点,则两条边正好将凸包卡住
code:(暂无)
判断点和线段是否在多边形内
设一条线从无限远的地方穿过此点,通过计算与多边形边的交点,得出是否在多边形内
设线段与多边形的边交于许多点,如果两个交点的中点也在多边形内,则线段在多边形内
未完继续~
计算几何基础知识总结相关推荐
- 计算几何基础知识 叉乘、点乘、点到直线距离、叉积方向法等
一.几何 常考却不怎么掌握的: 数据结构:分块 字符串:后缀数组.后缀自动机 数学:FFT.DFT.NTT.杜教筛.拉格朗日插值等 图论:网络流.最小费用最大流 动规:五边形数优化 ...
- 二维计算几何基础知识
1.点积: 向量点积的定义:(x1,y1)*(x2,y2)=x1*x2+y1*y2:满足交换律 向量点积的代数意义:向量V1的模 * 向量V2的模 * cos<V1,V2> 向量点积的几何 ...
- 计算几何及其应用——计算几何基础
写在前面:当时开计算几何这个专题神奇的从解析几何开始了,然后最近发现<计算几何及应用(金博)>这本书前面那章忽略掉了一些重要的东西比如说点定位.半平面相交之类的东西,恰好还有一些和计算几何 ...
- 计算几何基础【用图来助你理解几何算法】
写在前面,本人也是小白,这是我在大学自学的内容,有部分内容来自网上,若侵权请告知.当然如果这篇文章能够帮助到你,可以点赞收藏,如果写的不妥的地方,欢迎大佬们指出. 1.基本概念 1.1计算几何的引入 ...
- AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)
计算几何基础题 题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球. 我们首先考虑暴力. 我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x ...
- (一)计算几何基础(上)
文章目录 无语子,自己的模板出锅了,不过修改好了 计算几何基础知识点 例题一: 例题二 例题三:![在这里插入图片描述](https://img-blog.csdnimg.cn/ed358fece28 ...
- 计算几何基础入门详解
计算几何基础 1.最开始要提一下的还是精度问题,这在计算几何中可以说非常关键!!! const double eps=1e-8; //我一般都用eps表示,控制在1e-8左右,当然有些题会有它的要求 ...
- 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等
项目设计集合(人工智能方向):助力新人快速实战掌握技能.自主完成项目设计升级,提升自身的硬实力(不仅限NLP.知识图谱.计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户 ...
- Segments(计算几何基础)
题目来源:[NWPU][2014][TRN][19]二维计算几何基础 http://vjudge.net/vjudge/contest/view.action?cid=54080#problem/C ...
最新文章
- linux 定时任务 crontab 报错 service command not found 解决方法
- 查询数据库表名,数据表信息,MySQL Key值(PRI, UNI, MUL)的含义
- android通用的UUID唯一标示符
- plpythonu_postgresql plpythonu例子
- kalman滤波器公式的推导
- SAP CRM Fiori Simulation Pipeline 设计介绍
- Linux 基本操作--文件查看 (day3)
- Java多线程学习总结(6)——深入理解悲观锁与乐观锁
- 面试题 计算机安全,XX计算机信息安全工程师面试题路由.doc
- 定时任务:java 中Timer 和 TimerTask 的使用
- android小米推送,Android集成小米推送
- 电脑如何与移动硬盘实现自动同步备份?
- dd 命令用来测试硬盘及网络带宽读写速度
- ROS学习笔记(2)——ROS通信机制
- 初学Flutter 环境搭建
- 运维工程师发展受限,那么运维转型大数据是个机会吗?
- Androbench使用
- Java设计模式博客全目录
- 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒
- EDK2设备驱动模型