计算几何-几何库

来源:互联网 发布:自由公知技术抗辩 编辑:程序博客网 时间:2024/04/28 07:11

几何库可以自己写,也可以去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就可以了。

代码如下:

  判断两线段是否相交

思路:

  判断线段和直线是否相交

  判断矩形是否包含点

  判断线段、折线、多边形是否在矩形中

  判断矩形是否在矩形中

  判断圆是否在矩形中

  判断点是否在多边形中

  判断线段是否在多边形内

  判断折线是否在多边形内

  判断多边形是否在多边形内

  判断矩形是否在多边形内

  判断圆是否在多边形内

  判断点是否在圆内

  判断线段、折线、矩形、多边形是否在圆内

  判断圆是否在圆内

  计算点到线段的最近点

  计算点到折线、矩形、多边形的最近点

  计算点到圆的最近距离及交点坐标

  计算两条共线的线段的交点

  计算线段或直线与线段的交点

  求线段或直线与折线、矩形、多边形的交点

  求线段或直线与圆的交点

  凸包的概念

  凸包的求法

原创粉丝点击