【发布时间】:2014-10-07 22:32:58
【问题描述】:
我一直在用头撞墙,试图了解如何使用 CGAL 的圆形内核来计算线段 (Line_Arc_2) 和圆 (Circle_2) 之间的交点。不幸的是,循环内核的示例代码并不多,而且我没有找到参考手册有多大帮助。
这是我认为可以工作的代码,但现在它甚至无法编译(Mac OS 10.9 使用最新的系统编译器):
#include <vector>
#include <iterator>
#include <CGAL/Exact_circular_kernel_2.h>
#include <CGAL/Circular_kernel_intersections.h>
#include <CGAL/intersections.h>
#include <CGAL/result_of.h>
#include <CGAL/iterator.h>
#include <CGAL/point_generators_2.h>
#include <boost/bind.hpp>
typedef CGAL::Exact_circular_kernel_2 CircK;
typedef CGAL::Point_2<CircK> Pt2;
typedef CGAL::Circle_2<CircK> Circ2;
typedef CGAL::Line_arc_2<CircK> LineArc2;
typedef CGAL::cpp11::result_of<CircK::Intersect_2(Circ2,LineArc2)>::type Res;
int main(){
int n = 0;
Circ2 c = Circ2(Pt2(1,0), Pt2(0,1), Pt2(-1, 0));
LineArc2 l = LineArc2( Pt2(0,-2), Pt2(0,2) );
std::vector<Res> result;
CGAL::intersection(c, l, std::back_inserter(result));
return 0;
}
我在 result_of 行收到一个错误:“错误:在...中没有名为 'result_type' 的类型”,第二个错误是“没有可行的重载 '='”可用于相交线。
此外,因为这可能是后续问题,一旦它起作用:我如何实际到达放在向量中的交点? CGAL 的文档向我建议“结果”应该包含一对 Circular_arc_point_2 和一个表示其多重性的无符号整数。这是我在这种情况下实际得到的吗?更一般地说,有没有人知道使用 Circular Kernel 和 Spherical Kernel 相交例程的好教程?
谢谢!
【问题讨论】:
标签: geometry computational-geometry cgal