// // BoxPositionTool.hpp // auto_fill_jewel_v3 // // Created by Red on 2024/11/29. // 多个盘子包围盒子摆放工具类 #ifndef BoxPositionTool_hpp #define BoxPositionTool_hpp #include "BoostGeometryTools.hpp" #include #include using std::vector; #define BOXPOSITIONTOOL_CONTAINER_WIDTH 650 struct BoxPositionTool { /// 算法从左下角开始填,向右,填满水平空间向上填,超出来的就想上填 /// @param visWidth 可视化区域宽度 /// @param visHeight 可视化区域高度 /// @param boxSizeArr 输入矩形数组,数据是宽和高 /// @param resultPositions 是输出结果,对应输入矩形顺序,每个数据是一个box中心在整个可视化区域的坐标。可视化区域坐标原点在左下角。 void solve(const int visWidth,const int visHeight,vector>& boxSizeArr, vector>& resultPositions ) ; /// 只考虑宽度方向是否放的下不,宽度最大不能超过 270+270+110=650 bool withinContainer(const int llx,const int lly,const int wid,const int hei) ; bool interectsWithOthers(BoostGeometryTools::BoostPolygon& poly) ; private: vector _boxes ; } ; #endif /* BoxPositionTool_hpp */