在C/C++中处理球体上的点、线和多边形

13
我的应用程序是在地球(使用球体即可)表面上表示形状。这些可以是点、线和多边形。坐标应该使用度数或弧度来定义(就像地理坐标一样)。球面上两点之间的线段应该位于其大圆上。多边形应由此类线段的集合组成。此外,我想对提到的形状执行基本集合操作,如交集、并集、差集和补集。这些操作只需要输出点集合。
我尝试使用CGAL的三维球面几何核心嵌入在球面上的Nef多边形的二维布尔运算解决这个问题。实际上,我已经在将线放在球体上遇到了问题。此外,CGAL在欧几里得空间中工作,这仍然让我需要进行必要的几何运算,以处理放置在球面上的大圆。
我的问题是,如果您可以协助我实现CGAL中提到的功能,或者如果您可以推荐另一个用于C/C++的库来完成这项工作。非常感谢!

“在球面上嵌入Nef多边形的2D布尔运算”看起来可以满足您的需求。您需要帮助的具体内容是什么? - user168715
@user168715,我不太清楚你的问题。在第一段中,您需要在球体的表面上绘制形状,但在第二段中,您希望在大圆上绘制线条/多边形(这实际上会在球体内部绘制线条/多边形)。 - Pranav
@Pranav:球面上多边形的每个“线”都是不同大圆的一部分。 - aschepler
“这些操作只需要输出点的集合”是什么意思还不清楚。是哪种类型的点的集合? - n. m.
3个回答

1

1

0

找到两个对象的交点通常需要将定义对象的方程设置为相等。

这是一种方法,也许只是Vitor答案的另一种措辞。

首先,将每条线(弧)定义为参数方程。不管好坏,我认为这些弧是规范化向量在旋转时所经过的路径。所以这就是我如何定义它们的方式(我敢打赌有更好的方法)。

因此,我会取起始点和结束点,将它们视为向量,取它们的叉积得到旋转轴,然后取点积得到角度。

所以我的弧的方程看起来像这样

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

然后,您将把两个弧的方程设置为相等,并解决由此产生的方程组,求出每个方程中的“t”。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接