在CGAL中获取两个圆的交点
Obtaining the intersection points of two circles in CGAL
我正在尝试找出 CGAL 中两个单位半径圆的交点。受 CGAL 示例代码和教程的启发,我成功地创建了以下代码。但不幸的是,我无法打印出这些要点。我注意到矢量的大小是交点的数量。任何帮助将不胜感激,因为我是 CGAL 的新手。
#include <CGAL/Circular_kernel_intersections.h>
#include <CGAL/Exact_circular_kernel_2.h>
typedef CGAL::Exact_circular_kernel_2 Circular_k;
typedef CGAL::Point_2<Circular_k> Point_2;
typedef CGAL::Circle_2<Circular_k> Circle_2;
typedef CGAL::Circular_arc_2<Circular_k> Circular_arc_2;
typedef CGAL::CK2_Intersection_traits<Circular_k, Circle_2, Circle_2>::type Intersection_result;
using namespace std;
int main() {
Point_2 p(2,2), r(5.5,2);
Circle_2 c1(p,1), c2(r,1);
vector<Intersection_result> res;
intersection(c1,c2,back_inserter(res));
cout << res.size() << endl;
}
我测试了你的代码,它似乎可以工作。请注意,交点存储为 Circular_arc_point_2
。使用您的代码我只添加了以下几行:
using boostRetVal = std::pair<CGAL::Circular_arc_point_2<CGAL::Filtered_bbox_circular_kernel_2<CGAL::Circular_kernel_2<CGAL::Cartesian<CGAL::Gmpq>, CGAL::Algebraic_kernel_for_circles_2_2<CGAL::Gmpq> > > > , unsigned>;
for(const auto& element : res) {
auto algPoint = std::get<0>( boost::get< boostRetVal >(element) );
auto point = Point_2(to_double(algPoint.x()), to_double(algPoint.y()));
std::cout << point << std::endl;
}
我用p(0,0)
、r(2,0)
作为点,作为圆c1(p,4)
、c2(r,1)
,那么收到的输出是:
2
7/4 -4360591588697965/4503599627370496
7/4 4360591588697965/4503599627370496
我正在尝试找出 CGAL 中两个单位半径圆的交点。受 CGAL 示例代码和教程的启发,我成功地创建了以下代码。但不幸的是,我无法打印出这些要点。我注意到矢量的大小是交点的数量。任何帮助将不胜感激,因为我是 CGAL 的新手。
#include <CGAL/Circular_kernel_intersections.h>
#include <CGAL/Exact_circular_kernel_2.h>
typedef CGAL::Exact_circular_kernel_2 Circular_k;
typedef CGAL::Point_2<Circular_k> Point_2;
typedef CGAL::Circle_2<Circular_k> Circle_2;
typedef CGAL::Circular_arc_2<Circular_k> Circular_arc_2;
typedef CGAL::CK2_Intersection_traits<Circular_k, Circle_2, Circle_2>::type Intersection_result;
using namespace std;
int main() {
Point_2 p(2,2), r(5.5,2);
Circle_2 c1(p,1), c2(r,1);
vector<Intersection_result> res;
intersection(c1,c2,back_inserter(res));
cout << res.size() << endl;
}
我测试了你的代码,它似乎可以工作。请注意,交点存储为 Circular_arc_point_2
。使用您的代码我只添加了以下几行:
using boostRetVal = std::pair<CGAL::Circular_arc_point_2<CGAL::Filtered_bbox_circular_kernel_2<CGAL::Circular_kernel_2<CGAL::Cartesian<CGAL::Gmpq>, CGAL::Algebraic_kernel_for_circles_2_2<CGAL::Gmpq> > > > , unsigned>;
for(const auto& element : res) {
auto algPoint = std::get<0>( boost::get< boostRetVal >(element) );
auto point = Point_2(to_double(algPoint.x()), to_double(algPoint.y()));
std::cout << point << std::endl;
}
我用p(0,0)
、r(2,0)
作为点,作为圆c1(p,4)
、c2(r,1)
,那么收到的输出是:
2
7/4 -4360591588697965/4503599627370496
7/4 4360591588697965/4503599627370496