如果你具体谈论Boost.Geometry API,那当然是可能的。
你的代码应该大致是这样的
#include <boost/geometry/geometries/segment.hpp>
#include <boost/geometry/algorithms/intersection.hpp>
typedef boost::geometry::model::segment<Point> Segment;
Segment AB( Point(x1,y1), Point(x2,y2) );
Segment CD; //similar code
bool result = boost::geometry::intersects(AB, CD);
如果您需要交叉点:
std::vector<Point> output;
boost::geometry::intersection(AB, CD, output);
现在输出将有 0、1 或 2 个点,具体取决于位置。
当然,您的 Point 类型应该与 Boost.Geometry 概念“兼容”。以下代码将使 QPointF 兼容:
#include <boost/geometry/geometries/register/point.hpp>
BOOST_GEOMETRY_REGISTER_POINT_2D_GET_SET(QPointF, qreal, cs::cartesian, x, y, setX, setY);