基本元素
平面几何可以看做是由点、线、向量、多边形、圆等基础元素构成的,下面我们先来了解如何定义这些元素
点和向量
在平面直角坐标系中,点和向量都可以被表示为一个二元组
线
我们通常使用一个点
- 当
时,这是一条线段 - 当
时,这是一条射线 - 当
时,这是一条直线
圆
圆可以由一个点
多边形
多边形可以由各个顶点的坐标来确定
浮点误差
由于计算几何使用了 double
型浮点变量来储存结果,因此浮点误差不可避免,在进行大小比较时容易出现问题。
因此我们需要设立一个 eps
作为误差允许的范围,再进行比较
调用方法也很简单,当比较 dcmp(a - b)
即可,小于,等于,大于对应的返回
向量的基础运算
向量加法与减法
坐标直接相加或相减即可
数乘向量
坐标直接相乘即可
向量乘法
幅角相加,模长相乘
向量点乘
向量
向量模长
向量
向量投影长度
计算
调整一个向量的长度
将向量
向量叉乘(叉积)
向量
判断左手向与右手向
利用叉乘的性质,
垂直向量
求右手向垂直向量(叉积为正,点乘为
向量夹角
平行四边形的面积可由边
向量旋转
还记得向量乘法的 幅角相加,模长相乘 吗
要将向量
判断线段相交
快速排斥试验
性质一 若线段

如果两条线段不满足这个性质,那么我们可以判断这两条直线不相交,如果满足,则进行跨立实验。

跨立试验
为什么要进行跨立实验?我们来看一种特殊的情况。

这样的线段可以通过快速排斥试验,因此我们还需要再对这种情况进行处理。
性质二 若两条直线相交,一条直线的两个端点一定在另一条直线的两侧。
这个我们可以通过之前的叉积来判断左手向和右手向,非常简单。
计算几何基本操作
计算两个点之间的距离
只需要求出两点间向量的模长即可
计算点到直线的距离

计算向量
计算多边形面积

只要将多边形的顶点两两叉积,最后除以
对于图中的多边形
又因为叉积求得的面积其实是平行四边形面积,因此要除以
计算两直线交点

要求直线
平行向量大小相等,因此可以将向量
我们构造两个平行四边形,一个是由向量
这两个平行四边形共底(
线的平移
将线

只需要构造一个与
点的对称
将点

先构造经过点
线的反射
计算直线

先计算出直线
圆的交点
计算圆

第一步,先要判断圆
第二步,通过余弦定理计算出角
后记
以上是计算几何的一些最基本的操作,其他更高级的算法都是基于这些操作得到。
其他计算几何相关算法:
- Pick 定理
- 扫描线
- 二维凸包
- 旋转卡壳
- 半平面交
- KD-Tree
- …
参考资料
- yL@897982078 – 计算几何基础知识Ver2.0
- OI Wiki – 二维计算几何基础
- xia842655187 – 线段相交判断
加载更多