Tho*_* W. 5 c++ geometry boost numerical-methods boost-geometry
是否可以使用boost :: geometry来检查两个线段(每个由2D中的两个点给出)是否相互交叉?如果可能的话,boost :: geometry是否也允许检查特殊情况,例如在另一条线上只有一个点(数字),或两条线是否相等?
如果您正在特别谈论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);
Run Code Online (Sandbox Code Playgroud)
如果你需要交叉点:
std::vector<Point> output;
boost::geometry::intersection(AB, CD, output);
Run Code Online (Sandbox Code Playgroud)
现在输出将有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);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
5750 次 |
最近记录: |