12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091 |
- //
- // BoostGeometryTools.cpp
- // Test
- //
- // Created by 高慕白 on 2024/12/3.
- //
- #include "BoostGeometryTools.hpp"
- #define BOOSTGEOMETRYTOOLS_BOX_PT_CNT 5
- bool BoostGeometryTools::isAIntersectsB(BoostGeometryTools::BoostPolygon& polyA, BoostGeometryTools::BoostPolygon& polyB)
- {
- return boost::geometry::intersects(polyA, polyB) ;
- }
- bool BoostGeometryTools::isAWithinB(BoostGeometryTools::BoostPolygon& polyA, BoostGeometryTools::BoostPolygon& polyB)
- {
- return boost::geometry::within(polyA,polyB) ;
- }
- BoostGeometryTools::BoostPolygon BoostGeometryTools::makeBox( float lowerLeftX,float lowerLeftY,float wid,float hei )
- {
- float xarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftX, lowerLeftX+wid, lowerLeftX+wid , lowerLeftX , lowerLeftX } ;
- float yarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftY , lowerLeftY , lowerLeftY+hei , lowerLeftY+hei , lowerLeftY } ;
- BoostPolygon poly ;
- for(int ip = 0 ; ip < BOOSTGEOMETRYTOOLS_BOX_PT_CNT;++ip ) {
- poly.outer().push_back( {xarr[ip],yarr[ip]} ) ;
- }
- return poly ;
- }
- BoostGeometryTools::BoostPolygon BoostGeometryTools::makeRotatedBox( float lowerLeftX,float lowerLeftY,float wid,float hei,float rotdeg)
- {
- const float DEG2RAD = 3.141592/180.0;
- float rad = DEG2RAD*rotdeg ;
- float xarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftX, lowerLeftX+wid, lowerLeftX+wid , lowerLeftX , lowerLeftX } ;
- float yarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftY , lowerLeftY , lowerLeftY+hei , lowerLeftY+hei , lowerLeftY } ;
- BoostPolygon poly ;
- for(int ip = 0 ; ip < BOOSTGEOMETRYTOOLS_BOX_PT_CNT;++ip ) {
- float x1 = 0 ;
- float y1 = 0 ;
- rotatePoint(xarr[ip], yarr[ip], rad, x1, y1) ;
- poly.outer().push_back( {x1,y1} ) ;
- }
- return poly ;
- }
- void BoostGeometryTools::rotatePoint( float x0, float y0, float rotRad, float& x1,float& y1) {
- float cosval = cosf(rotRad) ;
- float sinval = sinf(rotRad) ;
- x1 = x0*cosval - y0*sinval ;
- y1 = x0*sinval + y0*cosval ;
- }
- BoostGeometryTools::BoostPolygon BoostGeometryTools::makeRotateNTranslateBox( float lowerLeftX,float lowerLeftY,float wid,float hei,float rotdeg,float dx,float dy)
- {
- const float DEG2RAD = 3.141592/180.0;
- float rad = DEG2RAD*rotdeg ;
- float xarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftX, lowerLeftX+wid, lowerLeftX+wid , lowerLeftX , lowerLeftX } ;
- float yarr[BOOSTGEOMETRYTOOLS_BOX_PT_CNT] = { lowerLeftY , lowerLeftY , lowerLeftY+hei , lowerLeftY+hei , lowerLeftY } ;
- BoostPolygon poly ;
- for(int ip = 0 ; ip < BOOSTGEOMETRYTOOLS_BOX_PT_CNT;++ip ) {
- float x1 = 0 ;
- float y1 = 0 ;
- rotatePoint(xarr[ip], yarr[ip], rad, x1, y1) ;
- poly.outer().push_back( {x1+dx,y1+dy} ) ;
- }
- return poly ;
- }
- BoostGeometryTools::BoostPolygon BoostGeometryTools::translatePolygon(BoostGeometryTools::BoostPolygon& poly,float dx,float dy)
- {
- BoostPolygon newPoly = poly ;
- for(auto it = newPoly.outer().begin(); it!=newPoly.outer().end();++it ) {
- it->set<0>( it->get<0>() + dx ) ;
- it->set<1>( it->get<1>() + dy ) ;
- }
- return newPoly ;
- }
- BoostGeometryTools::BoostPolygon BoostGeometryTools::convex_hull(BoostGeometryTools::BoostPolygon& poly)
- {
- BoostGeometryTools::BoostPolygon hull ;
- boost::geometry::convex_hull(poly, hull) ;
- return hull ;
- }
- bool BoostGeometryTools::pointIntersetsBox(BoostGeometryTools::BoostPoint& ptA,BoostGeometryTools::BoostPolygon& polyB)
- {
- return boost::geometry::intersects(ptA,polyB) ;
- }
|