使用C / C ++的球体上的点,线和多边形
我的应用是表示地球上的形状(使用球体就足够了)表面。 那些可以是点,线和多边形。 应使用度数或弧度(就像地理坐标一样)来定义坐标。
球体表面上两点之间的线段应位于其大圆上 。 多边形应包含这些线的集合。 此外,我想执行Set – Basic操作,如交集,联合,差异,补充所提到的形状。 这些操作只需要输出点集合。
我试图通过在球体上嵌入的Nef多边形上使用CGAL的3D球面几何内核和2D布尔运算来解决这个问题 。 实际上,我已经遇到了在球体上划线的问题。 此外,CGAL在欧几里德空间中工作,它仍然需要几何操作,以便与放置在球体上的大圆一起工作。
我的问题是,如果你可以帮助我实现CGAL中提到的function,或者你可以推荐另一个C / C ++库来实现这一点。 非常感谢你!
我建议你看看这个:
http://www.codeguru.com/Cpp/Cpp/algorithms/general/article.php/c5115/
问题1E解决了两个大圆圈之间交叉的问题。 由此您可以在球体上定义形状的基本操作,而不需要像CGAL或GEOS那样的大依赖性。
如果你想进行像union / intersection等一般的多边形集合操作,那么你可以从http://www.cs.man.ac.uk/~toby/alan/software/查看General polygon clipper库。
找到两个对象的交集通常需要设置定义对象的等式彼此相等。
这是一种方式,也许只是维托尔答案的另一种说法。
首先将每条线(弧)定义为参数方程。 无论好坏,我都将这些弧视为旋转时标准化矢量的路径。 这就是我如何定义它们(我打赌有更好的方法)。
因此,我将采用起点和终点,将它们视为矢量,将十字架乘以得到旋转轴,然后点积得到角度。
所以我的弧度方程看起来像
arc(t)= startPoint *(axisAngleToRotationMatrix(axis,t * angle))
然后,您可以将两个弧方程设置为彼此相等,并求解每个方程中“t”的方程组。