文章目录

  • 计算几何概念
  • 向量的基本运算
    • 向量概念
    • 向量加法
    • 向量减法
    • 向量叉积
  • 如何判断位置关系
    • 判断点是否在线段上
    • 判断线段和线段是否相交
    • 判断直线和线段是否相交
  • 多边形面积
  • 凸包
    • 凸包概念
    • 凸包算法
      • 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∣=x1​y2​−x2​y1​
其中叉积的几何意义为两向量通过平行构成平行四边形的面积(可能为负数)


如何判断位置关系

快速排斥实验:判断线段构成的矩形是否交
跨立实验:判断两点是否在线段的两端

快速排斥实验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:(暂无)


判断点和线段是否在多边形内

设一条线从无限远的地方穿过此点,通过计算与多边形边的交点,得出是否在多边形内
设线段与多边形的边交于许多点,如果两个交点的中点也在多边形内,则线段在多边形内


未完继续~

计算几何基础知识总结相关推荐

  1. 计算几何基础知识 叉乘、点乘、点到直线距离、叉积方向法等

    一.几何 常考却不怎么掌握的: ​ 数据结构:分块 ​ 字符串:后缀数组.后缀自动机 ​ 数学:FFT.DFT.NTT.杜教筛.拉格朗日插值等 ​ 图论:网络流.最小费用最大流 ​ 动规:五边形数优化 ...

  2. 二维计算几何基础知识

    1.点积: 向量点积的定义:(x1,y1)*(x2,y2)=x1*x2+y1*y2:满足交换律 向量点积的代数意义:向量V1的模 * 向量V2的模 * cos<V1,V2> 向量点积的几何 ...

  3. 计算几何及其应用——计算几何基础

    写在前面:当时开计算几何这个专题神奇的从解析几何开始了,然后最近发现<计算几何及应用(金博)>这本书前面那章忽略掉了一些重要的东西比如说点定位.半平面相交之类的东西,恰好还有一些和计算几何 ...

  4. 计算几何基础【用图来助你理解几何算法】

    写在前面,本人也是小白,这是我在大学自学的内容,有部分内容来自网上,若侵权请告知.当然如果这篇文章能够帮助到你,可以点赞收藏,如果写的不妥的地方,欢迎大佬们指出. 1.基本概念 1.1计算几何的引入 ...

  5. AcWing 2983. 玩具 / POJ 2318.toys(计算几何基础、二分、判断点和直线的位置关系)

    计算几何基础题 题目大意就是一个盒子被分成了若干个区域,有m个小球,问每个区域里分别有多少个小球. 我们首先考虑暴力. 我们如何判断小球是否在一个区域内呢,我们发现一个小球在区域x,也就是说所有小于x ...

  6. (一)计算几何基础(上)

    文章目录 无语子,自己的模板出锅了,不过修改好了 计算几何基础知识点 例题一: 例题二 例题三:![在这里插入图片描述](https://img-blog.csdnimg.cn/ed358fece28 ...

  7. 计算几何基础入门详解

    计算几何基础 1.最开始要提一下的还是精度问题,这在计算几何中可以说非常关键!!! const double eps=1e-8; //我一般都用eps表示,控制在1e-8左右,当然有些题会有它的要求 ...

  8. 知识图谱之《海贼王-ONEPICE》领域图谱项目实战(含码源):数据采集、知识存储、知识抽取、知识计算、知识应用、图谱可视化、问答系统(KBQA)等

    项目设计集合(人工智能方向):助力新人快速实战掌握技能.自主完成项目设计升级,提升自身的硬实力(不仅限NLP.知识图谱.计算机视觉等领域):汇总有意义的项目设计集合,助力新人快速实战掌握技能,助力用户 ...

  9. Segments(计算几何基础)

    题目来源:[NWPU][2014][TRN][19]二维计算几何基础 http://vjudge.net/vjudge/contest/view.action?cid=54080#problem/C ...

最新文章

  1. linux 定时任务 crontab 报错 service command not found 解决方法
  2. 查询数据库表名,数据表信息,MySQL Key值(PRI, UNI, MUL)的含义
  3. android通用的UUID唯一标示符
  4. plpythonu_postgresql plpythonu例子
  5. kalman滤波器公式的推导
  6. SAP CRM Fiori Simulation Pipeline 设计介绍
  7. Linux 基本操作--文件查看 (day3)
  8. Java多线程学习总结(6)——深入理解悲观锁与乐观锁
  9. 面试题 计算机安全,XX计算机信息安全工程师面试题路由.doc
  10. 定时任务:java 中Timer 和 TimerTask 的使用
  11. android小米推送,Android集成小米推送
  12. 电脑如何与移动硬盘实现自动同步备份?
  13. dd 命令用来测试硬盘及网络带宽读写速度
  14. ROS学习笔记(2)——ROS通信机制
  15. 初学Flutter 环境搭建
  16. 运维工程师发展受限,那么运维转型大数据是个机会吗?
  17. Androbench使用
  18. Java设计模式博客全目录
  19. 猫大叫一声,所有的老鼠都开始逃跑,主人被惊醒
  20. EDK2设备驱动模型

热门文章

  1. java除法取整_JAVA取整
  2. 水利水电安全员考试多选练习题库(2)
  3. Amazon Simple Storage Service介绍
  4. 【无人驾驶二】光学雷达(LiDAR)在无人驾驶技术中的应用
  5. 南信大程序设计大赛题目及代码
  6. 神经元响应的无参数统计检验
  7. 第五章-离散时间LTI系统
  8. Ubuntu/centos网络接口没有eth0但是有eth1或eth2的问题
  9. Neutrino追问AMA第15期|Celer 创始人董沫博士:链下扩容更容易做高互动低延迟的应用
  10. 基于文档对象模型的软件设计