二维计算几何基础

这篇具有很好参考价值的文章主要介绍了二维计算几何基础。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

二维计算几何基础

前置

  • 基本的几何知识

  • 平面直角坐标系

  • 向量

极坐标与极坐标系

我们在做题的时候会遇到说“点 \(B\) 在点 \(A\) 北偏东 \(30^{\circ}\) 方向上,距离 \(100\) 米”之类的,实际情况也是如此,而不是用“以 \(A\) 为原点建立平面直角坐标系,\(B(50,50\sqrt{3})\)”。

  1. 在平面选定一个点 \(O\),称之为极点

  2. 自极点引出一条射线 \(Ox\),称为极轴

  3. 选择一个单位长度(在数学问题上通常为 \(1\)),一个角度单位(通常是弧度)及其正方向(通常是逆时针方向)

就建立了极坐标系

极坐标系下的位置描述

\(A\) 为平面上一点。

  • 极点 \(O\)\(A\) 之间的距离 \(|OA|\) 称为极径,记为 \(\rho\)

  • 以极轴为始边,\(OA\) 为终边的角 \(\angle xOA\) 称为极角,记为 \(\varphi\)

那么有序数对 \((\rho,\varphi)\) 即为 \(A\) 的极坐标

由于 \((\rho,\varphi)\)\((\rho,\varphi+2k\pi)(k\in\mathbb{Z})\) 表示的其实是一样的点,所以如果规定 \(\rho\ge0,0\le \varphi<2\pi\),那么除极点以外都可以用唯一的有序数对来表示。

特别的,极点在没有限制的条件下可以表示成 \((\rho,\varphi)(\varphi\in\mathbb{R} )\),所以极点的表示方法是无数种。

图形的记录

在平面直角坐标系中,我们可以用一个数对来表示,也就是一个坐标,比如点 \((9,7),(2,3)\) 等等。

我们记录其横纵坐标值即可,我们可以用 pair 或者结构体来存储。

在极坐标系下,用极坐标表示即可。记录其极径与极角。

向量

由于向量的坐标表示和点相同,所以只要像点一样存即可(当然点不是向量

在极坐标系下,与点同理。

当然这里如果不了解数量积和向量积的话建议自己看一下。

直线与射线

考虑我们只想知道这条直线在哪,它的倾斜程度怎么样。于是我们用直线上一个点来大致确定位置,然后用一个向量来表示它的倾斜程度,好了,这条直线确定了。

因此我们记录的是:直线上一点和直线方向的方向向量。

线段

线段比较好记录,只要记录两个数组就好了。

在极坐标下记录线是比较麻烦的,所以大多数直线问题都在平面直角坐标系下解决。

多边形

我们可以直接用数组来依次记录多边形的每一个顶点即可。

特殊的,如果是各边都与坐标轴平行的矩形,我们可以只记录左下角和右上角的顶点。

曲线

一些特殊曲线,如二次函数,反比例函数等其他的函数图像,我们可以记录他们的解析式,对于圆,我们可以只记录其圆心坐标和半径长度。

基本公式

必修四应该学的。

正弦定理

在 $\triangle{ABC} $ 中,若角 \(A,B,C\) 所对应的边分别为 \(a,b,c\),则有:

\[\frac{a}{\sin A}=\frac{b}{\sin B}=\frac{c}{\sin C}=2R \]

其中,\(R\)\(\triangle ABC\) 的外接圆的半径。

余弦定理

\(\triangle ABC\) 中,若角 \(A,B,C\) 所对应的边分别为 \(a,b,c\),则有:

\[a^{2}=b^{2}+c^{2}-2bc\cos A \]
\[b^{2}=a^{2}+c^{2}-2ac\cos B \]
\[c^{2}=a^{2}+b^{2}-2ab\cos C \]

判断一个点在直线的哪边

我们有直线上的一点 \(P\) 的直线的方向向量 \(v\),想知道某个点 \(Q\) 在直线的哪边。

我们利用向量积的性质,算出 \(\overrightarrow{PQ}\times v\),如果向量积为负,则 \(Q\) 在直线上方,如果向量积为 \(0\),则 \(Q\) 在直线上,如果向量积为正,则 \(Q\) 在直线下方。

快速排斥实验与跨立实验

我们需要判断两条线段是否相交。

首先判断一些特殊情况,如果两线段平行,自然不能相交。这种情况通过判断线段所在的直线的斜率是否相等即可。

当然,如果两线段重合或者部分重合或两线段的交点为其中一条线段的端点,只需要判断是否有三点共线的情况即可。

规定一条线段的区域为以这条线段为对角线的,各边均与坐标轴平行的矩形所占的区域,如果这两个区域没有公共区域,那么这两条线段一定不相交。

比如有下面两条线段。

二维计算几何基础

他们的占用区域是这样的:

二维计算几何基础

于是可以快速地判断出来这两条线段不相交。

这就是快速排斥实验

但是两个区域有重合部分却不一定是相交的线段,比如下面这样:

二维计算几何基础

很明显他们的占用的区域是有交的,但这两条线段并没有交集。

因为两线段 \(a,b\) 相交,\(b\) 线段的两个端点一定分布在 \(a\) 线段所在的直线两个;同理 \(a\) 线段的两个端点一定分布在 \(b\) 线段所在的直线两侧。我们可以直接判断一条线段的两个端点相对于另一条线段所在直线的位置关系,如果不同,则两线段相交,反之则不相交。对于直线与点关系的判断,我们可以用向量积来判断。

上述方法称为跨立实验

注意到当两条线段共线但不相交时也可以通过跨立实验,因此想要准确判断还需要与快速排斥实验结合。

判断一个点是否在任意多边形内部

光线投射算法

我们可以先判断一些特殊情况,考虑一个能够完全覆盖此多边形的一个最小矩形,如果这个点不在这个矩形范围内,那么这个点一定不在多边形内。这样的矩形很好求,只需要知道多边形横坐标与纵坐标的最小值和最大值,坐标两两组合成四个点,就是这个矩形的四个顶点了。

在多边形边和点上时,对于点我们可以直接枚举判断,对于边,我们可以用斜率加起始的 \(x\) 坐标结合来判断。

我们考虑以该点为端点引出一条射线,如果这条射线与多边形有 奇数个交点,则该点在多边形内部,否则在该多边形外部,我们简记为奇内偶外。这个算法同样被称为奇偶规则。

二维计算几何基础

我们看上面的图,其中 \(K,H\) 分别为在多边形外和多边形内的两点,我们对于上面的算法来寻找个例。

例如射线 \(KL\),我们对于经过边的情况计算的交点个数没有明确的定义,所以我们在挑选射线时需要舍去会和边重合的情况。

我们发现,射线 \(KM\) 与多边形的交点为三个,但是 \(K\) 实际上是在多边形外部。

同样的,我们可以看到射线 \(HJ\) 与多变形的交点为两个,但 \(H\) 实际上在多边形内部。

所以我们也要挑选没有经过点的射线。

当然可能经过了点也是正确的答案,比如上面如果作射线 \(KF\) 的话我们得到的就是正确的结论,但我们并不可能在代码中加入更多繁琐的代码来判断这个,毕竟没有经过点和没有和边共线的情况多了去了。

回转数算法

回转数是数学上的概念,是平面内闭合曲线逆时针绕过该点的总次数。很容易发现,当回转数等于 \(0\) 的时候,点在曲线外部,这个算法同样被称为非零规则。

我们把该点与多边形的所有顶点链接起来,计算相邻两边夹角的和。注意这里的夹角是有方向的。如果夹角和为 \(0\),则这个点在多边形外,否则在多边形内。

求两条直线的交点

首先,我们需要确定两条直线相交,只需判断一下两条直线的方向向量是否平行即可。

如果方向向量平行,则两条直线平行,交点个数为 \(0\)。进一步地,若两条直线平行且过同一点,则两直线重合。

然后我们有直线 \(AB,CD\) 交于一点,想求出交点 \(E\)

如果两直线相交,则交点只有一个,我们记录了直线上的一个点和直线的方向向量,所以我们只需要知道这个点与交点的距离 \(l\),再将这个点沿方向向量平移 \(l\) 个单位长度即可。

考虑构造三角形,利用正弦定理来求解 \(l\),可以利用向量积构造出正弦定理。

二维计算几何基础

由上图可知,\(|a\times b|=|a||b|\sin\beta,|u\times b|=|u||b|\sin\theta\)

做商得:

\[T=\frac{|u\times b|}{|a\times b|}=\frac{|u|\sin\theta}{|a|\sin\beta} \]

可以看出 \(|\frac{|u|\sin\theta}{\sin\beta}|=l\).若绝对值内部式子取值为正,代表沿 \(a\) 方向平移,反之则为反方向。

同时,我们将 \(T\) 直接乘上 \(a\),就自动出现了直线的单位向量,不需要进行其他消去操作了。

于是,只需要将点 \(B\) 减去 \(Ta\) 即可得出交点。

求任意多边形的周长和面积

求周长

没有好办法,枚举每两个点就是最好的。

求面积

考虑向量积的模的几何意义,我们可以利用向量积来完成。

将多边形上的点逆时针标记为 \(p_{1},p_{2},\dots,p_{n}\),再任选一个辅助点 \(O\),记向量 \(v_{i}=p_{i}-O\),那么这个多边形的面积 \(S\) 可以表示为:

\[S=\frac{1}{2}|\sum_{i=1}^{n}v_{i}\times v_{(i\bmod{n})+1}| \]

圆与直线相关

求直线与圆的交点

首先判断直线与圆的位置关系。如果直线与圆相离则无交点,若相切则可以利用切线求出切点与半径所在直线,之后转化为求两直线交点。

若有两交点,则可以利用勾股定理求出两交点的中点,然后沿直线方向加上半弦长即可。

求两圆交点

首先我们判断一下两个圆的位置关系,如果外离或内含则无交点,如果相切,可以算出两圆心连线的方向向量,然后利用两圆半径计算出平移距离,最后将圆心沿这个方向向量进行平移即可。

如果两圆相交,则必有两个交点,并且关于两圆心连线对称。因此下面只说明一个交点的求法,另一个交点可以用类似方法求出。

我们先将一圆圆心与交点相连,求出两圆心连线与该连线所成角。这样,将两圆心连线的方向向量旋转这个角度,就是圆心与交点相连形成的半径的方向向量了。

最后还是老套路——沿方向向量方向将圆心平移半径长度。

极角序

一般来说,这类题需要先枚举一个极点,然后计算出其他点的极坐标,在极坐标系下按极角的顺序解决问题。

大部分参考自 oiwiki文章来源地址https://www.toymoban.com/news/detail-464856.html

到了这里,关于二维计算几何基础的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习·理论篇(2023版)·第002篇深度学习和计算机视觉中的基础数学知识01:线性变换的定义+基于角度的线性变换案例(坐标变换)+点积和投影+矩阵乘法的几何意义+图形化精讲

    💕 恭喜本博客浏览量达到两百万,CSDN内容合伙人,CSDN人工智能领域实力新星~ 🧡 本文章为2021版本迭代更新版本,在结合有效知识的基础上对文章进行合理的增加,使得整个文章时刻顺应时代需要 🧡 本专栏将通过系统的深度学习实例,从可解释性的角度对深度学习的原理

    2023年04月08日
    浏览(56)
  • 计算几何——扫描线 学习笔记

    你会发现我的笔记的顺序和很多扫描线的讲解是反着来的。 其实是和我老师给的课件完全是逆序(谁帮我算一下逆序对啊喵)。 一开始以为扫描线就是用来求二维几何图像的信息的。 但是其实这个并不准确。个人认为,扫描线其实是一个思想,就像动态规划一样。 具体的,

    2024年03月11日
    浏览(52)
  • 【计算机视觉】对极几何

    我的《计算机视觉》系列参考UC Berkeley的CS180课程,PPT可以在课程主页看到。 在上一篇文章3D视觉中我们介绍了在两个照相机像平面共面的情况下如何计算深度:深度与景物在图片中的位移成反比。这篇文章我们讨论更一般的情形,像平面不必共面,甚至不必平行。假设两个相

    2024年02月06日
    浏览(52)
  • 计算几何——三角剖分(Triangulation)

    本节主要讲解了如何将二维多边形划分为多个不相交的三角形。         考虑如下场景,在一个尺寸为多边形的画廊中放置摄像头(哨兵),需要放几个才能完全覆盖该场景?可以看到下图至少需要两个哨兵。         如下图,若多边形是凸多边形或星形多边形,那么只

    2023年04月09日
    浏览(40)
  • Arcgis通过模型构建器计算几何坐标

    模型中,先添加字段,再计算字段 模型的计算字段中,表达式是类似这样写的,其中Xmin表示X坐标,Ymin表示Y坐标 类似计算面积

    2024年02月14日
    浏览(43)
  • 【蓝桥备赛】矩形总面积——计算几何

    矩形总面积 根据题意,两个矩形如果存在重叠部分,只会是这三种其一。不过再仔细观察这些边的关系,容易得到以下计算重叠区域大小的方法。 那么,这道题的解法就是,计算两个矩形的面积再减去重复部分(如果有重复部分的话) 看完下方的代码,可能有人奇怪为什么

    2024年01月24日
    浏览(50)
  • 计算几何公式(点到直线距离,点到线段距离等)

    参照学校大佬的模板整理出

    2024年02月14日
    浏览(44)
  • 【C++】开源:CGAL计算几何库配置使用

    😏 ★,° :.☆( ̄▽ ̄)/$: .°★ 😏 这篇文章主要介绍CGAL计算几何库配置使用。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下,下次更新不迷路🥞 项目Github地址: https://github.com/CGAL/cgal CGAL(Computational G

    2024年02月13日
    浏览(38)
  • 概率基础——几何分布

    在统计学中,几何分布是描述了在一系列独立同分布的伯努利试验中,第一次成功所需的试验次数的概率分布。在连续抛掷硬币的试验中,每次抛掷结果为正面向上的概率为 p p p ,反面向上的概率为 1 − p 1-p 1 − p 。几何随机变量 X X X 表示连续抛掷硬币直到第一次出现正面

    2024年02月22日
    浏览(31)
  • 【matplotlib基础】--几何图形

    除了绘制各类分析图形(比如柱状图,折线图,饼图等等)以外, matplotlib 也可以在画布上任意绘制各类几何图形。 这对于计算机图形学、几何算法和计算机辅助设计等领域非常重要。 matplitlib 中的 patches 类提供了丰富的几何对象, 本篇抛砖引玉,介绍其中几种常用的几何

    2024年02月08日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包