带有C / C ++的球体上的点,线和多边形

时间:2010-04-28 10:53:07

标签: c++ c geometry computational-geometry cgal

我的应用是表示地球上的形状(使用球体足够)表面。那些可以是点,线和多边形。应使用度数或弧度来定义坐标(就像地理坐标一样)。

球体表面上两点之间的线段应位于great circle上。多边形应包含这些线的集合。此外,我想对所提到的形状执行Set - Basic Operations,如交集,联合,差异,补充。这些操作只需输出点集合。

我尝试使用CGAL的3D Spherical Geometry Kernel2D Boolean Operations on Nef Polygons Embedded on the Sphere来解决这个问题。实际上,我已经遇到了在球体上划线的问题。此外,CGAL在欧几里德空间中工作,它仍然需要几何操作,以便与放置在球体上的大圆一起工作。

我的问题是,如果你可以帮助我实现CGAL中提到的功能,或者你可以推荐另一个C / C ++库来实现这一点。非常感谢你!

3 个答案:

答案 0 :(得分:1)

我建议你看看这个:

http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/

问题1E解决了两个大圆圈之间的交叉问题。由此您可以在球体上定义形状的基本操作,而不需要像CGAL或GEOS那样的大依赖。

答案 1 :(得分:1)

如果你想进行像union / intersection等一般的多边形集操作,那么你可以从http://www.cs.man.ac.uk/~toby/alan/software/

查看General polygon clipper库。

答案 2 :(得分:0)

查找两个对象的交集通常需要设置定义对象彼此相等的方程式。

这是一种方式,也许只是维托尔答案的另一种措辞。

首先将每条线(弧)定义为参数方程。无论好坏,我都将这些弧视为旋转时归一化矢量的路径。这就是我如何定义它们(我打赌有更好的方法)。

所以我会选择起点和终点,将它们视为矢量,将十字产品放在旋转轴上,然后用点积来得到角度。

所以我的弧度方程看起来像

arc(t)= startPoint *(axisAngleToRotationMatrix(axis,t * angle))

然后,您可以将两个弧方程设置为彼此相等,并求解每个方程中“t”的方程组。