BoxPositionTool.hpp 1.3 KB

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