《目录》
- 介绍
- 解析几何
- 历史
- 坐标系
- 点
- 直线
- 多边形
- 圆
- 椭圆
- 存储问题
- 精度问题
- 矢量
计算机擅长计算,某些几何问题中可能需要经过几个坐标系的共同计算才能得出答案。
所以这件事情交给了计算机,我们把这类繁琐的几何问题称为 "计算几何"。
计算几何问题的输入,通常是一组几何物体的描述,输出是关于物体位置关系的回答。
计算几何是计算机科学一个分支,在计算机图形、计算机辅助设计等应用广泛。
在学习计算几何之前需要一些解析几何基础。
解析几何:借助平面直角坐标系用代数的方法研究几何对象之间的关系、性质的几何分支。
由平面解析几何和立体解析几何组成。
解析几何使变量和运动进入数学,是初等数学向高等数学发展的转折点,为函数论和微积分等现代主流数学创立了基础。
解析几何是 17世纪由笛卡尔(1596-1650)、费马(1601-1665)等数学家创立,也叫坐标几何。
恩格斯曾经把 "微积分"、"对数"、"解析几何" 当做 17 世纪 3 大数学发明。
笛卡尔认为欧几里得几何学过分强调证明技巧和过分依赖图形像少儿"看图说话",不利于几何学进步;
代数又完全手纸于法则和公式,过于抽象,缺乏直观性,因此 笛卡尔主张俩者联合,形成数学分支的联合优势。
平面的基本性质:
公理 1 :如果一条直线上的俩点在一个平面内,那这条直线在此平面内。
公理 2 :如果俩个不重合的平面有一个公共点,那有且只有一条过该点的公共直线。
公理 3 :过不在一条直线上的三点,有且只有一个平面。
根据公理 3 的推论:
(1) 经过一条直线和这条直线外一点有且只有一个平面。
(2) 经过俩条相交直线有且只有一个平面。
(3) 经过俩条平行直线有且只有一个平面。
空间直角坐标系计算俩点之间的距离方程:。
,。
在平面之间坐标系中的点通常记为 P(x, y)。
计算 原点O 到 任一点P(x, y)的距离:。
计算 任意俩点之间的距离,记俩点为 。
俩点的坐标即 ,,由勾股定理(可证明)可得俩点之间的距离: 。
从解析几何角度看平面的直线就是平面直角坐标系中的二元一次方程(一般式方程):Ax + By + C = 0 (a、b不能同时为 0),若 B 不为 0,直线的斜率 。
当 A = 0,直线平行于 x 轴,B = 0 直线平行于 y 轴。
直线的倾斜角:假设有一条直线 l,当 l 与 坐标系 x 轴相交时,以 x 正半轴为基准 与 l 向上方向间的角 是 l 的倾斜角在 [0º, 180º )。
倘若直线 l 与 x 轴重合或平行,倾斜角 = 0º 。
直线的斜率 k = tan() = , , 是经过直线的俩点。
若俩条直线相互平行,则TA们的斜率相等;若俩条直线相互垂直,则TA们的斜率乘积等于 - 1。
P(x, y) 点到直线ax + by + c = 0 的距离:,可构造直角三角形证明。
点到直线距离公式的证明图示.gif直线的点斜式方程:。
点斜式方程的推导图示.gif直线的斜截式方程:y = kx + b。
斜截式方程推导图示.gif 俩点式方程推导图示.gif直线的截距式方程:。
截距式方程推导图示.gif直线的交点:以下图为例。
先使用叉积(矢量的内容)求出 ABC 和 ABD 的面积,得到 OC 和 OD 的比值,就得到 O 点的坐标
求解交点图示.gif《几何原本》定义为 4 边以上的线段首尾顺序连接所组成的封闭图形叫做多边形。
多边形:正多边形和非正多边形、凸(平面)多边形和凹(空间)多边形等。
多边形的内角和定理:n 边形的内角和等于 (n - 2) * 180º。
简单多边形面积:假设我们已按照逆时钟顺序存储了多边形的顶点(P1、P2、P3、... Pn),面积为:
简单多边形即被点包围如 "凹", 复杂多边形即没被点包围如 "五角星⭐️"。
圆心坐标 : A(a, b),半径为 r。
圆的标准方程:。
圆标准方程推导图示.gif点与圆的关系:
一般方程:。
椭圆的定义:平面内与俩定点 F1、F2 的距离的和等于常数 2a 的动点 M 的轨迹,2a > |F1F2|,|F1F2| = 2c,2a > 2c。
|MF1| + |MF2| = 2a,F1\F2 叫椭圆的焦点,M 为椭圆的动点。
椭圆的长轴是 2a,短轴是 2b。
焦点在 x 轴 焦点在 y 轴其中 。
上述的几何对象如何在计算机中存储 ?
计算几何不仅计算量较大,参与运算的通常是实数,会产生一定的浮点误差。
我们一般采用绝对精度判断,还有相对精度和绝对精度+相对精度的判断方法。
绝对精度:设定一个值 eps,范围一般: 。
要满足的条件,换而言之达不到这些条件采用绝对精度判断会失效,
判断 a, b 相等: fabs(a - b) < eps;
判断 a, b 不相等: fabs(a - b) > eps;
判断 a < b: a + eps < b;
判断 a >= b: a < b + eps;
fabs: C库函数,返回值为实数的绝对值。
矢量:有方向的线段,也叫向量,线段的俩个端点 P1 和 P2,从P1到P2的距离称为模(如同取绝对值保证距离为正)。
矢量是高等数学的分支,力学分析应用广泛,在计算几何中使用矢量代替三角函数等会让程序变得简洁高效。
矢量的斜率 k 有正负之分。
矢量的完整介绍:https://baike.baidu.com/item/平面向量/448934
点积:俩个矢量(a、b)的模相乘再乘以TA们夹角的余弦(cos),
矢量点积图示.gif
分析点积满足的性质,大概 6 条但这里只说 分配律。
分配律:a · (b + c) = a · b + a · c,p.s. " · " 不是乘法,而是矢量的点积。
若图中的 矢量b 与 矢量 a 反向,那就是 a - b。
做向量的题目,一般只需要考虑坐标上的单位矢量转向哪里就能得到正确结果。
旋转向量:旋转某个向量 a(x, y),旋转 的弧度:
旋转向量的证明图示.gif
利用三角函数的和角公式换简,得出的式子:。
叉积:用叉积可判断从一个矢量到另一个矢量的旋转分方向,也求同时垂直于俩个矢量的矢量方向、计算多边形面积。
叉积图示理解:https://blog.csdn.net/dcrmg/article/details/52416832
(平面)凸包的定义:包围平面上 n 个点的最小凸多边形。
一图胜千言:
选定一点(最左/右/上下)其余过程如图枚举出边,这样的枚举一条边的时间复杂度是 ,凸包就是最后的形状。
这叫 "Jarvis 算法" ,时间复杂度是 ,m 是枚举的边数伪代码如下。
P; // 第一个点,一般选最左边即横坐标 x 最小
i = 0;
while(Finshed, i == 最后一个点)
P[i] = P;
init = S[0]; // 初始化一个候选解
for(j = 1; j < S; j ++)
if(S[j] 在 P[i] 至 init 的向量的左侧)
init = S[j] // 候选解更新为更左的
i ++;
所以,通常我们先对点集的元素排序,排序方法有 极角序(采用 Graham 扫描) 或 水平序(Andrew 算法)。
水平序:
推荐资料:https://www.docin.com/p-886199697.html
更多的计算几何知识推荐《算法的乐趣》。
需要 pdf 可以找我,另外推荐资料:https://wjyyy.blog.luogu.org/geometry1 ~