GridPositionTool.hpp 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. //
  2. // GridPositionTool.hpp
  3. // auto_fill_jewel_v3
  4. //
  5. // Created by Red on 2024/12/4.
  6. //
  7. #ifndef GridPositionTool_hpp
  8. #define GridPositionTool_hpp
  9. #include <stdio.h>
  10. #include <vector>
  11. #include "FillGlobalConfig.hpp"
  12. using std::vector;
  13. struct GridPositionTool {
  14. /// 大盘子 210 210 210。 3x3=9个网格
  15. /// 中盘子 210 210 210。 3x6=18 个网格
  16. /// 小盘子 110 110 110 110 110 110 6x6=36 个网格
  17. /// 算法 https://t7le908iko.feishu.cn/docx/Cn4tdr0S7o76Ffx4lrVcJtManBg 第6节的顺序进行填充
  18. /// @param plateTypeIdArr 盘子类型ID数组,通过盘子类型ID可以获取盘子大中小尺寸信息
  19. /// @param resultPositions 是输出结果,对应输入矩形顺序,每个数据是一个box中心在整个可视化区域(640,720)的坐标。可视化区域坐标原点在左下角。
  20. void solve(const bool movable, const vector<int>& plateTypeIdArr , vector<vector<int>>& resultPositions ) ;
  21. private:
  22. //给定顺序值index,从网格Grid中找到对应的网格列行坐标。列行坐标从0开始计。
  23. //找到了返回true,反之返回false
  24. bool getIndexPositionInGrid( const vector<vector<int>>& gridRows, const int index, int& col,int& row) ;
  25. //输入网格col和row,col和row是左上角网格原点,返回的是盘子中心x,y像素坐标 游戏区左下角为坐标原点。
  26. vector<int> computePositionByGridColRow(int plateSize, int col, int row ) ;
  27. } ;
  28. #endif /* GridPositionTool_hpp */