【问题标题】:CGAL Intersection returns false resultCGAL 交叉口返回错误结果
【发布时间】:2015-09-08 15:01:39
【问题描述】:

我对@9​​87654321@ 的工作原理有点困惑。 我认为如果两个多边形中都有一个点,该函数会返回true。据我没有弄错in 位于out 之内,我应该看到true 打印出来或者我错过了什么?

#include <CGAL/Point_2.h>
#include <CGAL/Polygon_2.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>

typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
typedef Kernel::Point_2 Point_2;
typedef CGAL::Polygon_2<Kernel> Polygon_2;
int main(int argc, char **argv)
{
  Polygon_2 in, out;
  in.push_back(Point_2(1,1));
  in.push_back(Point_2(1,2));
  in.push_back(Point_2(2,2));
  in.push_back(Point_2(2,1));

  out.push_back(Point_2(0,0));
  out.push_back(Point_2(3,0));
  out.push_back(Point_2(3,3));
  out.push_back(Point_2(0,3));

  std::cout << "IN intersect with OUT is " << (CGAL::do_intersect(in, out) ? "true":"false") << std::endl;
  std::cout << "OUT intersect with IN is " << (CGAL::do_intersect(out, in) ? "true":"false") << std::endl;
  std::cout.flush();
}

【问题讨论】:

    标签: polygon intersection cgal


    【解决方案1】:

    多边形中的顶点需要逆时针。以下代码产生所需的输出:

    IN intersect with OUT is true
    OUT intersect with IN is true
    

    #include <CGAL/Point_2.h>
    #include <CGAL/Polygon_2.h>
    #include <CGAL/Exact_predicates_exact_constructions_kernel.h>
    #include <CGAL/Boolean_set_operations_2.h>
    
    typedef CGAL::Exact_predicates_exact_constructions_kernel Kernel;
    typedef Kernel::Point_2 Point_2;
    typedef CGAL::Polygon_2<Kernel> Polygon_2;
    int main(int argc, char **argv)
    {
      Polygon_2 in, out;
      in.push_back(Point_2(1,1));
      in.push_back(Point_2(2,1));
      in.push_back(Point_2(2,2));
      in.push_back(Point_2(1,2));
    
      out.push_back(Point_2(0,0));
      out.push_back(Point_2(3,0));
      out.push_back(Point_2(3,3));
      out.push_back(Point_2(0,3));
    
      std::cout << "IN intersect with OUT is " << (CGAL::do_intersect(in, out) ? "true":"false") << std::endl;
      std::cout << "OUT intersect with IN is " << (CGAL::do_intersect(out, in) ? "true":"false") << std::endl;
      std::cout.flush();
    }
    

    【讨论】:

    • 非常感谢。我找不到任何记录。
    猜你喜欢
    • 1970-01-01
    • 2013-11-11
    • 2010-11-04
    • 2021-05-05
    • 2020-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多