• 使用Python PyQt5完成残缺棋盘覆盖仿真作业


    摘要:本文内容是关于如何实现残缺棋盘覆盖仿真软件,算法课作业要求设计开发一个残缺棋盘覆盖仿真软件。使用”分治算法“求解问题,Python编程语言实现功能;使用PyQt5和Python热力图实现界面和仿真效果展示。

    1 残缺棋盘覆盖仿真作业

    1.1 题目要求

     

    1.2 问题描述

     

     2 实现效果

    2.1 效果图

     2.2 视频演示

    残缺棋盘覆盖仿真演示视频

     

    3 开发环境

    语言:python3
    开发工具:pycharm
    工具库:
    PyQt5 5.12.1
    pyqt5-tools 5.11.2.1.3
    注:导入上面两个库要先导入sip库

    4 开发步骤

    详细PyQT5开发配置步骤见博文 使用Python PyQt5实现一个简单的图像识别软件

    5 算法

    5.1 算法思想 

      采用分治思想  ,对2k×2k2k×2k的棋盘进行划分,划分为更小一级的棋盘实例。即划分为4个2k1×2k12k1×2k1的棋盘:

     划分后的4个小棋盘中只有一个棋盘存在残缺方格。首先覆盖残缺方格的小棋盘。然后把剩下3个小棋盘转变为残缺棋盘;此外,要注意位置问题,将一个三格板放置由这3个小棋盘形成的角上。

    5.2算法核心代码

    1. # 算法 分割棋盘
    2. def splitchess(self, x, y, size, xl, yc):
    3. # 判断size值
    4. if size == 1:
    5. return
    6. # 分割
    7. subSize = size // 2
    8. # 设置类型标记 用于
    9. if size > 24:
    10. self.type = self.type % 4 + 1
    11. else:
    12. self.type += 1
    13. # print(self.type)
    14. n = self.type
    15. # 假设特殊点在左上角区域 对左上角进行分割
    16. if x < xl + subSize and y < yc + subSize:
    17. self.splitchess(x, y, subSize, xl, yc)
    18. else:
    19. self.chess[xl + subSize - 1][yc + subSize - 1] = n
    20. self.splitchess(xl + subSize - 1, yc + subSize - 1, subSize, xl, yc)
    21. # 假设特殊点在右上角区域
    22. if x < xl + subSize and y >= yc + subSize:
    23. self.splitchess(x, y, subSize, xl, yc + subSize)
    24. else:
    25. self.chess[xl + subSize - 1][yc + subSize] = n
    26. self.splitchess(xl + subSize - 1, yc + subSize, subSize, xl, yc + subSize)
    27. # 假设特殊点在左下角区域
    28. if x >= xl + subSize and y < yc + subSize:
    29. self.splitchess(x, y, subSize, xl + subSize, yc)
    30. else:
    31. self.chess[xl + subSize][yc + subSize - 1] = n
    32. self.splitchess(xl + subSize, yc + subSize - 1, subSize, xl + subSize, yc)
    33. # 假设特殊点在右下角区域
    34. if x >= xl + subSize and y >= yc + subSize:
    35. self.splitchess(x, y, subSize, xl + subSize, yc + subSize)
    36. else:
    37. self.chess[xl + subSize][yc + subSize] = n
    38. self.splitchess(xl + subSize, yc + subSize, subSize, xl + subSize, yc + subSize)

    6.测试

     

    7 说明

    暂时仅仅实现最简单的覆盖问题,还要一些问题没完善;

    1.随机生成残缺块没有去设置。我这里残缺块的位置是可以自己输入,作业要求随机生成。自己写一个随机生产坐标的函数就可完成;

    2.以及k值大了,图片变模糊; 可以动态调整生成的图片大小或热力图其它解决方案;

    3.其它等等;

  • 相关阅读:
    three.js入门 —— 实现第一个3D案例
    力扣 35. 搜索插入位置
    以太网基础理论—MAC+PHY
    onnx如何在中间删除了一个节点,怎么样把剩下的节点连接一起呢
    Tensor、Numpy、PIL格式转换以及图像显示
    【网络安全-sql注入(5)】sqlmap以及几款自动化sql注入工具的详细使用过程(提供工具)
    计算机毕业设计SSM电子投票系统【附源码数据库】
    k8s实战入门——Service
    threejs CSS3DRenderer添加标签并设置朝向摄像机
    Spring基础知识总结(纯文字版)
  • 原文地址:https://blog.csdn.net/yue200403/article/details/127755684