123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- //
- // BoostGeometryTools.cpp
- // auto_fill_jewel_v3
- //
- // Created by Red on 2024/11/26.
- //
- #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) ;
- }
|