计算几何(Computational Geometry)简单来说就是用计算机解决几何问题。
Computational指“using or connected with computers使用计算机的;与计算机有关的”,Geometry指“the branch of mathematics that deals with the measurements and relationships of lines, angles, surfaces and solids几何(学)”。
从定义可知,所有与几何有关的算法都属计算几何,所以它是个比较大的概念。像计算机图形学、机器人技术、地理信息系统(GIS)、计算机视觉和计算生物学等都属计算几何的范畴;像走迷宫,计算最佳出行路线等问题,都离不开计算几何。
一、核心研究内容
计算几何的主要研究内容如下:
(1)高效算法。这是计算几何的核心,要能高效地处理几何数据、解决几何问题。
(2)几何图形的构建。指几何对象(如点、线、多边形、多面体等)在计算机环境中的数学表示。这是解决几何问题的第一步,你得先要把几何数据输入到计算机内。基本上,几何元素都是要通过坐标来表示。
(3)几何操作。对几何图形的各种操作,如几何图形的变换、裁剪、显隐、填充。
(4)几何分析。比如几何关系的判断与计算、几何空间分析等。
二、算法
1.常用算法
(1)矢量运算。
①矢量减法。对于二维矢量P = (x1, y1)和Q = (x2, y2),矢量减法法则:P - Q = (x1 - x2, y1 - y2)。
②矢量叉积。矢量叉积定义为P × Q = x1y2 - x2y1,其结果是一个标量。叉积的正负可以用来判断两个矢量的相对方向。若P × Q > 0,则P在Q的顺时针方向;若P × Q < 0,则P在Q的逆时针方向;若P × Q = 0,则P与Q共线。
(2)关系判断。
关系判断涉及到各种几何图形之间的关系,比如判断点是否在线段上、两线段是否相交、线段和直线是否相交、矩形是否包含点、点是否在多边形中、线段是否在多边形内。这些算法相对比较复杂,不一一介绍了。
2.典型算法
还有一些比较典型的算法,如点到线段的距离、多边形的遍历、凸包算法(Graham扫描法、Jarvis步走法)、最近点对查找、三角剖分等,这些算法都在计算几何中发挥着关键作用。
比如现在流行的自动驾驶技术,凸包算法就有很大的用武之地!所谓的凸包可以简单理解为下面这张图:
“凸”的意思就是多边形的每个内角都小于180度,也就是咱们几何中学的那种多边形。
“包”就是像个包裹一样把里面的东西都包住。
凸包算法就是要找到一个满足上面两个条件的最小的包裹。
对汽车进行凸包就像给汽车穿上一层“紧身衣”,能够更准确地反映汽车的形状和特征,这是智能避让障碍物的前提。
三、数据结构
计算几何常用的几何数据有点(Point)、向量(Vector)、线段(Line Segment)、直线(Line)、多边形(Polygon)等,这些基本上都可以用结构体实现。
还有一些高效的几何数据结构,比如kd树、Voronoi图和Delaunay三角网等,它们能够帮助我们快速查询和操作点集,以及分析空间中的几何关系。