【问题标题】:Points, Lines, and Polygons on Spheres with C/C++ [closed]使用 C/C++ 的球体上的点、线和多边形 [关闭]
【发布时间】:2011-02-13 07:11:29
【问题描述】:

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

球体表面两点之间的线段应位于其great circle 上。多边形应该由这些线条的集合组成。此外,我想在提到的形状上执行Set - Basic Operations 之类的交叉、联合、差异、补充。这些操作只需要输出点的集合即可。

我尝试使用 CGAL 的 3D Spherical Geometry Kernel2D Boolean Operations on Nef Polygons Embedded on the Sphere 来解决这个问题。实际上,我在球体上划线时已经遇到了问题。此外,CGAL 在欧几里得空间中工作,这仍然给我留下了必要的几何运算,以处理放置在球体上的大圆圈。

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

【问题讨论】:

  • “嵌入在球体上的 Nef 多边形的 2D 布尔运算”看起来可以满足您的需求。您有什么具体需要帮助的吗?
  • @user168715 我不清楚你的问题。在第一段中,您需要在球体的 surface 上绘制形状,但在第二段中,您希望在大圆上绘制线条/多边形(实际上将在 inside上绘制线条/多边形> 球体)。
  • @Pranav:球体表面多边形的每条“线”都是不同大圆的一部分。
  • 不清楚“这些操作只需要输出点的集合”是什么意思。什么样的积分集合?

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


【解决方案1】:

我建议你看看这个:

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

问题 1E 解决了两个大圆之间的交集问题。从此您可以定义球体上形状的基本操作,而无需像 CGAL 或 GEOS 这样的大依赖。

【讨论】:

    【解决方案2】:

    如果你想做通用多边形集合操作,比如联合/交叉等,那么你可以从http://www.cs.man.ac.uk/~toby/alan/software/查看通用多边形剪裁器库

    【讨论】:

      【解决方案3】:

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

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

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

      所以我会取起点和终点,将它们视为向量,取叉积得到旋转轴,点积得到角度。

      所以我的弧方程看起来像

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-12
        • 2013-02-20
        • 2017-09-12
        • 2016-11-06
        • 2011-05-13
        • 1970-01-01
        • 1970-01-01
        • 2018-04-24
        • 1970-01-01
        相关资源
        最近更新 更多