【python】通行网格地图四叉树化 (leeccode 427)

【python】通行网格地图四叉树化

受到Leecode 427题的启发,427. 建立四叉树
想将由0和1组成的网格地图绘制为四叉树地图,0表示可通行网格,1表示不可通行网格。

import matplotlib.pyplot as plt  
import matplotlib.patches as patches  
import numpy as np  
from matplotlib import colors  class Node:  def __init__(self, x0, y0, w, h, data):  self.x0 = x0  self.y0 = y0  self.width = w  self.height = h  self.data = data  self.children = []  self.passable = np.sum(data == 1) / (w * h) <= 0.9  # 障碍物比例<= 0.2 可通行  class QuadTree:  def __init__(self, x, y, w, h, data):  self.root = Node(x, y, w, h, data)  self.root.passable = True  if self.root.passable:  self.subdivide(self.root)  def subdivide(self, node):  x, y, w, h = node.x0, node.y0, node.width // 2, node.height // 2# Divide the node's data into quadrantsdata_quadrants = [  node.data[0:h, 0:w],  node.data[h: node.height, 0:w],  node.data[0:h, w:node.width],  node.data[h:node.height, w:node.width]  ]  for i, data in enumerate(data_quadrants):  width = w  height = h  if (i // 2):  width = node.width - w  if (i % 2):  height = node.height - h  child = Node(x + (i // 2) * w, y + (i % 2) * h, width, height, data)  node.children.append(child)  if len(np.unique(data)) > 1 and w > 1 and h > 1:  self.subdivide(child)  def draw(self, ax):  def _draw(node):  color = 'black' if not node.passable else 'white'  # ax.add_patch(patches.Rectangle((node.x0, node.y0), node.width, node.height, facecolor=color, edgecolor='black'))  ax.add_patch(  patches.Rectangle((node.x0, node.y0), node.width, node.height, facecolor=color, edgecolor='black'))  for child in node.children:  if child is not None:  _draw(child)  _draw(self.root)  def print_leaves(self, node=None):  if node is None:  node = self.root  if all(child is None for child in node.children):  print(  f"Leaf Node: x={node.x0}, y={node.y0}, width={node.width}, height={node.height}, passable={node.passable}")  else:  for child in node.children:  if child is not None:  self.print_leaves(child)  # Create a 32x32 grid map with random obstacles  
map_data = np.loadtxt("./map_txt/Random_32x32_.2.txt")  width, height = map_data.shape  # Create a quadtree  
qt = QuadTree(0, 0, width, height, map_data)  cmap = colors.ListedColormap(['white', 'black', ])  # Draw the original map  
fig, axs = plt.subplots(1, 2, figsize=(10, 5))  
axs[0].imshow(map_data, cmap=cmap, origin='lower')  
axs[0].set_title('Original Map')  # Draw the quadtree  
axs[1].set_xlim(0, width)  
axs[1].set_ylim(0, height)  
qt.draw(axs[1])  
axs[1].set_title('Quadtree Map')  plt.show()

运行结果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/26768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【数学建模】MATLAB入门教程:插值与拟合(下)

前言 插值与拟合在数据处理和科学计算中扮演着非常重要的角色&#xff0c;它们用于估算未知数据点的值&#xff0c;帮助我们理解和预测数据趋势 一、一维插值 1、一维插值定义 已知n1个节点(,)(j0,1,...,n,其中互不相同&#xff0c;不妨设a<<...<b),求任一插值点(…

鸿蒙开发:任务(Mission)与启动模式

任务&#xff08;Mission&#xff09;与启动模式 如前文所述&#xff0c;一个UIAbility实例对应一个任务。UIAbility实例个数与UIAbility配置的启动模式有关。在FA模型下&#xff0c;通过config.json配置文件中的“launchType”属性配置&#xff1b;在Stage模型下&#xff0c;…

QTableWidget自定义代理,实现自动换行

尝试使用setWordWrap(true)&#xff0c;但是仅对中文有效&#xff0c;对英文不会自动换行&#xff0c;最后只能用代理。 代理实现 class WordWrapDelegate : public QStyledItemDelegate { public:using QStyledItemDelegate::QStyledItemDelegate;void paint(QPainter *pai…

【镜像制作】Oracle JDK项目镜像压缩

文章目录 简介代码 简介 大家有没有试过在使用Oracle jdk的项目时&#xff0c;由于jdk的包太大&#xff0c;制作出来的镜像往往特别大&#xff0c;在大规模容器化的场景下&#xff0c;镜像的大小对存储的空间&#xff0c;拉取速度&#xff0c;启动的快慢都有一定 影响&#xff…

C#聊天室②

客户端 桌面 MyClient client;public Form1(){InitializeComponent();}// 进入聊天室按钮方法private void button1_Click(object sender, EventArgs e){if (!string.IsNullOrEmpty(textBox1.Text)){// 开始连接服务器 封装一个自定义客户端类client new MyClient(); // 给cl…

基于jeecgboot-vue3的Flowable流程-流程处理(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 这部分修正一些流程处理中VForm3线上的一些bug问题 1、初始化流程提交与现实的前端页面代码 <!--初始化流程加载默认VForm3表单信息--><el-col :span"16" :offset&qu…

【Qt实现录频】

在Qt中实现录制视频可以通过使用Qt Multimedia模块来实现。你可以使用QCamera类来访问摄像头并捕获视频数据。以下是一个简单的示例代码,用于在Qt中实现录制视频: #include <QCamera> #include <QCameraInfo> #include <QCameraViewfinder> #include <…

nlp学习笔记

目录 很多入门例子 bert chinese 很多入门例子 https://github.com/lansinuote/Huggingface_Toturials bert chinese import torch import torch.nn as nn from transformers import AutoTokenizer, AutoModel, BertModel, TFBertModel, BertTokenizer# youpath = D:/bert-…

实时通信websocket和sse

microsoft/fetch-event-source是一个JavaScript库&#xff0c;用于处理服务器发送的事件&#xff08;Server-Sent Events&#xff0c;简称SSE&#xff09;。它提供了一个简单易用的API&#xff0c;使得客户端可以与服务器进行实时通信。这个库主要用于浏览器环境 安装依赖npm i…

【Mybatis】动态SQL的绑定和公共sql语句片段

Mybatis还有三个标签&#xff0c;分别是bind&#xff0c;sql和include ①bind&#xff1a;这个标签作用就是将OGNL标签里的值&#xff0c;进行二次加工&#xff0c;在绑定到另一个变量里&#xff0c;供其他标签使用&#xff0c;举个例子 调用getUsers方法的时候&#xff0c;我…

网络编程(二)TCP

一、TCP网络编程 网络编程模型&#xff1a; C/S模型&#xff1a;客户端服务器模型 优点&#xff1a; 客户端可以缓存一些数据&#xff0c;使用时直接在本地读取&#xff0c;无需每次重新下载&#xff1b; 由于客户端和服务器都是自己开发的&#xff0c;可以自定义协议 缺点&a…

【React】在 React 中的useDeferredValue的作用是什么,怎么使用

在React中,useDeferredValue是一个在React 18版本中引入的新Hook,其主要作用是为了优化渲染性能,特别是在处理大量状态更新或复杂渲染逻辑时,通过延迟某些非关键性的更新来提高用户体验和应用的流畅性。 作用: 优化渲染性能:当组件的某个状态或属性发生变化时,React通常…

文案提取小帮手轻松将视频为转文字!而且不限时长

作为一个自媒体的资深用户总在一个一个的敲字真的太慢了&#xff0c;而且很多创作者都知道追热点是和时间赛跑。如果你嫌弃自己手抄效率太低&#xff0c;看视频又嫌时间太长。 今天叫教你一个可以将视频转文字的工具&#xff0c; 这个工具就叫文案提取小帮手&#xff0c;而且…

Vue前端ffmpeg压缩视频再上传(全网唯一公开真正实现)

1.Vue项目中安装插件ffmpeg 1.1 插件版本依赖配置 两个插件的版本 "ffmpeg/core": "^0.10.0", "ffmpeg/ffmpeg": "^0.10.1"package.json 和 package-lock.json 都加入如下ffmpeg的版本配置&#xff1a; 1.2 把ffmpeg安装到项目依…

Java老人护理上门服务类型系统小程序APP源码

&#x1f338; 老人上门护理服务系统&#xff1a;温暖与专业并存 &#x1f338; 一、&#x1f3e0; 走进老人上门护理服务系统 随着社会的快速发展&#xff0c;我们越来越关注老年人的生活质量。老人上门护理服务系统应运而生&#xff0c;它结合了现代科技与人性化服务&#…

最小生成树prim算法详解

prim算法解决的是最小生成树问题&#xff0c;即在一个给定的无向图G中求一棵生成树T&#xff0c;使得这棵树拥有图G中的所有顶点&#xff0c;且所有边都是来自图G中的边&#xff0c;并且满足整棵树的边权之和最小。 prim算法的基本思想是对图G设置集合S来存放已被访问的顶点&a…

【源码】【Spring+SpringMVC+MyBatis】电子商城网上购物平台的设计与开发

学生成绩管理系统 系统功能开发环境开发技术前端技术后端技术 系统展示登录界面注册界面系统首页商品详情页下单界面付款界面购物车界面 源码获取↓↓↓↓&#xff1a; 源码可在后台私信联系博主或文末添加博主微信获取帮助 系统功能 登录、注册模块&#xff1a;如果用户第一次…

基于Java+Swing+mysql幼儿园信息管理系统V2

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

Day31 - Day35

Day31 - Day35 Day31&#xff08;1999年text5&#xff09; Science, in practice, depends far less on the experiments it prepares than on the preparedness of the minds of the men who watch the experiments. 在实践中&#xff0c;科学对实验的依赖远少于对实验观察者…

【网络编程】基于UDP的服务器端/客户端

UDP可看作是信件邮寄&#xff0c;邮寄过程可能会信件丢失&#xff0c;是一种不可靠的数据传输服务。 但UDP性能更高&#xff0c;实现更加简洁。流控制是区分UDP和TCP的最重要标志。 IP的作用就是让离开主机B的UDP数据包传递给主机B&#xff0c;UDP根据端口号将传到主机的数据包…