在CGAL库中有计算圆与射线交集的方法吗?文档显示,在CGAL::交() (2D圆核)中存在行和圆之间的交集。但线没有方向,我必须增加一些额外的检查。是否有任何方便的方法来计算这样的交叉口,而不需要额外的操作,以使这个例程更快?也许没有必要使用循环内核?
发布于 2022-07-13 17:11:52
不,在CGAL中不能计算圆和射线之间的交点(我不是CGAL开发人员,所以如果我错了,希望他们能纠正我)。
但是,您可以使用两种类型的内核--圆形和线性--检测圆和射线之间的交叉。全局CGAL函数do_intersect
计算圆心与射线之间的距离,然后将其与圆半径进行比较,因此不需要计算实际的交点。
#include <iostream>
#include <CGAL/Exact_circular_kernel_2.h>
#include <CGAL/Exact_predicates_exact_constructions_kernel.h>
using KernelC = CGAL::Exact_circular_kernel_2;
using PointC = KernelC::Point_2;
using CircleC = KernelC::Circle_2;
using RayC = KernelC::Ray_2;
using KernelL = CGAL::Exact_predicates_exact_constructions_kernel;
using PointL = KernelL::Point_2;
using CircleL = KernelL::Circle_2;
using RayL = KernelL::Ray_2;
int main()
{
{
CircleC c{PointC{0,0}, 1};
RayC r{PointC{0, 0}, PointC{1, 1}};
std::cout << CGAL::do_intersect(c, r) << std::endl;
}
{
CircleL c{PointL{0,0}, 1};
RayL r{PointL{0, 0}, PointL{1, 1}};
std::cout << CGAL::do_intersect(c, r) << std::endl;
}
}
如果将do_intersect
替换为intersection
并编译,您将看到允许交叉的所有类型组合。
https://stackoverflow.com/questions/72901407
复制