几何库可以自己写,也可以去down一个。
不过有一个很好的几何库,AutoDesk提供的几何库,满足点、线、面的定义,并能实现相交、平移、缩放、投影等多种计算,有名气,免费提供。
唯一不爽的是,你必须按照AutoDesk提供的名字定义点、线、面。
如:
点:AcGePoint3d,AcGePoint2d
线:AcGeLine3d AcGeLine2d
面:AcGePlan
在C++的头文件种添加 #include "acad.h"头文件,并在工程设置中添加:acad.lib,一道编译即可。
以下是一些典型的几何问题的解决思路和C++语言实现,一般能一笔带过的不再给出代码,因有些问题有很多解,这里不探讨方法的优劣,只为工业强度解决问题提出计算几何的实现,所有实现采用AutoDesk类库的几何定义方式。
折线段的拐向判断
思路:
用折线段的向量叉积,判断叉积的正负情况,就是判断折线段前进方向构成的带符号的面积,来判断折线段的拐向。
实现:
判断点是否在线段上
思路: 简化为三个点(线段两个点、点)之间的面积关系,根据面积判断点是否在线段上。
面积=(底×高)÷2,底为线段的长,高为点到直线的距离
S=ah/2,当h<eps时,认为点在线段上,eps为在实际调用函数过程中给定的一个小量,该小量是你自己必须认真确认的,如果没有其它特殊要求,一般1e-6就可以了。
代码如下:
判断两线段是否相交
思路:
判断线段和直线是否相交
判断矩形是否包含点
判断线段、折线、多边形是否在矩形中
判断矩形是否在矩形中
判断圆是否在矩形中
判断点是否在多边形中
判断线段是否在多边形内
判断折线是否在多边形内
判断多边形是否在多边形内
判断矩形是否在多边形内
判断圆是否在多边形内
判断点是否在圆内
判断线段、折线、矩形、多边形是否在圆内
判断圆是否在圆内
计算点到线段的最近点
计算点到折线、矩形、多边形的最近点
计算点到圆的最近距离及交点坐标
计算两条共线的线段的交点
计算线段或直线与线段的交点
求线段或直线与折线、矩形、多边形的交点
求线段或直线与圆的交点
凸包的概念