我刚刚开始在飞机上使用Nef多面体-下面的简单程序创建了一个半平面,由y=0行定义,然后由CGAL Explorer探索该半平面。

#include <iostream>

#include <CGAL/Exact_integer.h>
#include <CGAL/Extended_cartesian.h>
#include <CGAL/Nef_polyhedron_2.h>

using Kernel = CGAL::Extended_cartesian<CGAL::Exact_integer>;
using Polyhedron = CGAL::Nef_polyhedron_2<Kernel>;
using Line = Polyhedron::Line;

using std::cout;
using std::endl;

int main()
{
  const Polyhedron p(Line(0, 1, 0), Polyhedron::INCLUDED);
  const auto ex = p.explorer();
  for (auto it = ex.vertices_begin(); it != ex.vertices_end(); ++it)
  {
    if (ex.is_standard(it))
    {
      cout << "Point: " << ex.point(it) << endl;
    }
    else
    {
      cout << "Ray:   " << ex.ray(it) << endl;
    }
  }
}

程序输出:
Ray:   0 0 -1 -1
Ray:   0 0 -1 0
Ray:   0 0 -1 1
Ray:   0 0 1 -1
Ray:   0 0 1 0
Ray:   0 0 1 1

为什么这六缕?

最佳答案

documentation中获取explorer:

假设这些顶点在盒子上,我的最佳猜测是:
c&#43;&#43; - CGAL:为什么半平面用六射线表示?-LMLPHP
这是一个正方形,所以这就是为什么您会得到0, 0 -> -1, 10, 0 -> 1, 1之类的对角线的原因。我不是专家。
编辑:工程图是上下颠倒的,半平面是y >= 0,而不是y <= 0

10-07 13:37