当前位置: 首页 > news >正文

python绘制3d建筑

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据
def generate_building_blocks(num_blocks, grid_size=100, height_range=(5, 50), base_size_range=(10, 30)):buildings = []for _ in range(num_blocks):# 随机选择建筑的底面起点x = np.random.uniform(0, grid_size)y = np.random.uniform(0, grid_size)# 随机生成建筑的高度和底面大小dx = np.random.uniform(*base_size_range)dy = np.random.uniform(*base_size_range)dz = np.random.uniform(*height_range)buildings.append([x, y, dx, dy, dz])return buildings# 绘制建筑块
def plot_buildings(buildings, color='skyblue'):fig = plt.figure(figsize=(8, 8))ax = fig.add_subplot(111, projection='3d')for building in buildings:x, y, dx, dy, dz = building# 每个建筑的顶点坐标# vertices = [#     [(x, y, 0), (x + dx, y, 0), (x + dx, y + dy, 0), (x, y + dy, 0)],  # 底面#     [(x, y, dz), (x + dx, y, dz), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 顶面# ]vertices = [[(x, y, 0), (x + dx, y, 0), (x + dx, y + dy, 0), (x, y + dy, 0)],  # 底面[(x, y, dz), (x + dx, y, dz), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 顶面[(x, y, 0), (x + dx, y, 0), (x + dx, y, dz), (x, y, dz)],  # 侧面1[(x + dx, y, 0), (x + dx, y + dy, 0), (x + dx, y + dy, dz), (x + dx, y, dz)],  # 侧面2[(x, y + dy, 0), (x + dx, y + dy, 0), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 侧面3[(x, y, 0), (x, y + dy, 0), (x, y + dy, dz), (x, y, dz)]  # 侧面4]# 构建面for v in vertices:ax.add_collection3d(Poly3DCollection([v], color=color, alpha=0.7))# 绘制立方体的竖直边for i in range(4):ax.plot([vertices[0][i][0], vertices[1][i][0]], [vertices[0][i][1], vertices[1][i][1]], [vertices[0][i][2], vertices[1][i][2]], color=color)ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.set_box_aspect([1, 1, 0.5])  # 控制显示比例plt.show()# 生成随机建筑数据
buildings = generate_building_blocks(num_blocks=50, grid_size=200)# 绘制随机建筑
plot_buildings(buildings)

import matplotlib.pyplot as plt
import numpy as np
from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据
def generate_building_blocks(num_blocks, grid_size=100, height_range=(5, 50), base_size_range=(10, 30)):buildings = []for _ in range(num_blocks):# 随机选择建筑的底面起点x = np.random.uniform(0, grid_size)y = np.random.uniform(0, grid_size)# 随机生成建筑的高度和底面大小dx = np.random.uniform(*base_size_range)dy = np.random.uniform(*base_size_range)dz = np.random.uniform(*height_range)buildings.append([x, y, dx, dy, dz])return buildings# 绘制建筑块
# def plot_buildings(buildings, color='skyblue'):
def plot_buildings(buildings, color='skyblue', edge_color='gray', alpha=0.8):fig = plt.figure(figsize=(8, 8))ax = fig.add_subplot(111, projection='3d')ax.view_init(elev=50, azim=60)  # 设置视角,elev 为俯仰角,azim 为方位角for building in buildings:x, y, dx, dy, dz = building# 每个建筑的顶点坐标# vertices = [#     [(x, y, 0), (x + dx, y, 0), (x + dx, y + dy, 0), (x, y + dy, 0)],  # 底面#     [(x, y, dz), (x + dx, y, dz), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 顶面# ]vertices = [[(x, y, 0), (x + dx, y, 0), (x + dx, y + dy, 0), (x, y + dy, 0)],  # 底面[(x, y, dz), (x + dx, y, dz), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 顶面[(x, y, 0), (x + dx, y, 0), (x + dx, y, dz), (x, y, dz)],  # 侧面1[(x + dx, y, 0), (x + dx, y + dy, 0), (x + dx, y + dy, dz), (x + dx, y, dz)],  # 侧面2[(x, y + dy, 0), (x + dx, y + dy, 0), (x + dx, y + dy, dz), (x, y + dy, dz)],  # 侧面3[(x, y, 0), (x, y + dy, 0), (x, y + dy, dz), (x, y, dz)]  # 侧面4]# 构建面# for v in vertices:#     ax.add_collection3d(Poly3DCollection([v], color=color, alpha=0.7))# 构建面,带有透明度和边框for v in vertices:poly = Poly3DCollection([v], facecolors=color, edgecolors=edge_color, linewidths=0.2, alpha=alpha)ax.add_collection3d(poly)# 绘制立方体的竖直边for i in range(4):ax.plot([vertices[0][i][0], vertices[1][i][0]], [vertices[0][i][1], vertices[1][i][1]], [vertices[0][i][2], vertices[1][i][2]], color=color)ax.set_xlabel('X')ax.set_ylabel('Y')ax.set_zlabel('Z')ax.set_box_aspect([1, 1, 0.5])  # 控制显示比例# 设置视角和比例# ax.set_box_aspect([1, 1, 0.3])# ax.set_axis_off()  # 隐藏轴以增加美观plt.show()# 生成随机建筑数据
buildings = generate_building_blocks(num_blocks=50, grid_size=200)# 绘制随机建筑
plot_buildings(buildings)

相关文章:

python绘制3d建筑

import matplotlib.pyplot as plt import numpy as np from mpl_toolkits.mplot3d.art3d import Poly3DCollection# 随机生成建筑块数据 def generate_building_blocks(num_blocks, grid_size100, height_range(5, 50), base_size_range(10, 30)):buildings []for _ in range(…...

机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用

大家好,我是微学AI,今天给大家介绍一下机器学习实战21-基于XGBoost算法实现糖尿病数据集的分类预测模型及应用。首先阐述了 XGBoost 算法的数学原理及公式,为模型构建提供理论基础。接着利用 kaggle 平台的糖尿病数据集,通过详细的…...

ElasticSearch数据类型和分词器

一、数据类型 1、Text (文本数据类型) 2、Keyword(关键字数据类型) 3、Alias(别名类型) 4、Arrays (集合类型) 5、Boolean(布尔类型) 6、日期类型 7、Numeric (数…...

【云原生监控】Prometheus之PushGateway

Prometheus之PushGateway 文章目录 Prometheus之PushGateway介绍作用资源列表基础环境一、部署PushGateway1.1、下载软件包1.2、解压软件包1.3、编辑配置systemctl启动文件1.4、创建日志目录1.5、加载并启动1.6、监控端口1.7、访问PushGateway 二、 配置Prometheus抓取PushGate…...

sqlalchemy JSON 字段写入时中文序列化问题

JSON字段定义 from sqlalchemy import Column, JSONclass Table(Base):__tablename__ "table"__table_args__ ({"comment": "表名称"})...extra Column(JSON, comment"其他属性")...局部序列化 def create(extra):table Table()#…...

C++ 类域+类的对象大小

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 类定义了一个新的作用域,类的所有成员都在类的作用域中&#xff…...

QT开发:深入详解QtCore模块事件处理,一文学懂QT 事件循环与处理机制

Qt 是一个跨平台的 C 应用程序框架,QtCore 模块提供了核心的非 GUI 功能。事件处理是 Qt 应用程序的重要组成部分。Qt 的事件处理机制包括事件循环和事件处理,它们共同确保应用程序能够响应用户输入、定时器事件和其他事件。 1. 事件循环(Ev…...

小米,B站网络安全岗位笔试题目+答案

《网安面试指南》http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247484339&idx1&sn356300f169de74e7a778b04bfbbbd0ab&chksmc0e47aeff793f3f9a5f7abcfa57695e8944e52bca2de2c7a3eb1aecb3c1e6b9cb6abe509d51f&scene21#wechat_redirect 《Java代码审…...

微信小程序中巧妙使用 wx:if 和 catchtouchmove 实现弹窗禁止页面滑动功能

大家好,今天我要和大家分享的是在微信小程序开发过程中,如何利用 wx:if 或 wx:elif 来条件性地渲染不同的元素,并结合 catchtouchmove 事件处理函数来解决弹窗弹出时禁止背后页面滑动,而弹窗消失时恢复滑动的功能。 在微信小程序…...

唯徳知识产权管理系统 DownloadFileWordTemplate 文件读取漏洞复现

0x01 产品简介 唯徳知识产权管理系统,由深圳市唯德科创信息有限公司精心打造,旨在为企业及代理机构提供全方位、高效、安全的知识产权管理解决方案。该系统集成了专利、商标、版权等知识产权的全面管理功能,并通过云平台实现远程在线办公,提升工作效率。是一款集知识产权申…...

我在高职教STM32——准备HAL库工程模板(2)

新学期已开始,又要给学生上 STM32 嵌入式课程了。这课上了多年了,一直用的都是标准库来开发,已经驾轻就熟了。人就是这样,有了自己熟悉的舒适圈,就很难做出改变,老师上课也是如此,排斥新课和不熟悉的内容。显然,STM32 的开发,HAL 库已是主流,自己其实也在使用,只不过…...

数字化转型的实战法则:全面剖析《数字化专业知识体系》中的落地策略与最佳实践

开启数字化成功的实践路径 随着全球经济加速迈向数字化,企业不再仅仅依赖传统商业模式,而是通过技术创新提升竞争力与市场地位。然而,数字化转型的成功不仅依赖于战略思维,更需要精准的实战执行。《数字化专业知识体系》&#xf…...

远程桌面内网穿透是什么?有什么作用?

远程桌面内网穿透指的是通过特定技术手段,将处于内网中的电脑或服务器,通过外部网络(互联网)进行访问。内网穿透的主要作用是解决在内网环境下,远程设备与外部互联网之间的连接问题,允许用户从外部访问内网…...

【算法专场】分治(上)

目录 前言 什么是分治? 75. 颜色分类 算法分析 算法步骤 算法代码 912. 排序数组 - 力扣(LeetCode) 算法分析 算法步骤 算法代码 215. 数组中的第K个最大元素 - 力扣(LeetCode) 算法分析 算法步骤 ​编辑…...

腾讯云软件工程师面试问题收集记录-数据库

SQL是什么:结构化查询语言,是一种专门用于管理关系型数据库管理系统的编程语言 MySQL操作命令 数据库操作 登陆数据库:mysql -u 用户面 -p创建数据库:CREATE DATABASE testdb; SQLite操作命令 数据库操作 创建数据库:…...

Sourcetree安装教程及使用

下载链接:源代码树 |适用于 Mac 和 Windows 的免费 Git GUI (sourcetreeapp.com) Sourcetree安装教程及使用_sourcetree 安装使用-CSDN博客...

TryHackMe 第1天 | Introduction to Cyber Security

偶然之间了解到了TryHackMe这个网站,尝试跟着其中的学习路径进行学习,发现还是挺适合入门网络安全这一领域的。但是这个网站包含了很多内容,如果不用一些东西记录下来,那么很容易忘记,所以打算在此记录一下学习过程。 …...

ASP.NET MVC 迅速集成 SignalR

在现代 Web 应用程序中,实时更新数据是一个常见需求。本文将详细介绍如何在 ASP.NET MVC 项目中使用 SignalR 实现定时任务操作数据库并将数据更新到网页。我们将逐步讲解如何配置 SignalR、创建定时任务、操作数据库以及在前端显示实时数据。 目录 项目初始化安装…...

[数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):1123 标注数量(xml文件个数):1123 标注数量(txt文件个数):1123 标注…...

【Python 数据分析学习】Matplotlib 的基础和应用

题目 1 Matplotlib 主要特性2 Matplotlib 基础知识2.1 导入模块2.2 图形构成2.2.1 图形(Figure)2.2.2 轴 (Axes)2.2.3 轴线(axis) 2.5 中文设置2.5.1 借助rcParams修改字体实现设置2.5.2 增加一个fontprope…...

十字军之王II双字节字符显示解决方案:从乱码到完美支持的技术实现

十字军之王II双字节字符显示解决方案:从乱码到完美支持的技术实现 【免费下载链接】CK2dll Crusader Kings II double byte patch /production : 3.3.4 /dev : 3.3.4 项目地址: https://gitcode.com/gh_mirrors/ck/CK2dll 当《十字军之王II》玩家第一次在游戏…...

MOSFET栅极电阻选型实战:从波形分析到最佳阻值确定(附IRF540实测数据)

MOSFET栅极电阻选型实战:从波形分析到最佳阻值确定(附IRF540实测数据) 在电力电子设计中,MOSFET的栅极电阻选型往往被工程师视为"小问题",但实际调试中却可能成为影响系统稳定性的关键因素。记得去年参与一款…...

从洗衣机到无人机:SVPWM如何让日常电器中的电机更安静、更省电?

从洗衣机到无人机:SVPWM如何让日常电器中的电机更安静、更省电? 当你享受变频空调带来的舒适温度,或是惊叹于无人机平稳的飞行姿态时,可能不会想到这些体验背后都藏着一个关键技术——空间矢量脉宽调制(SVPWM&#xff…...

EcomGPT-7B电商大模型网络安全应用:智能识别钓鱼商品与欺诈文案

EcomGPT-7B电商大模型网络安全应用:智能识别钓鱼商品与欺诈文案 最近和几个做电商平台的朋友聊天,他们都在头疼同一个问题:平台上的商品和文案越来越“花”,有些商家为了引流,标题和描述写得天花乱坠,甚至…...

NanoHttpd POST 请求中文乱码问题解决方案

解决方案 推荐做法&#xff1a;服务器端修正 在请求处理的 serve() 方法中&#xff0c;在调用 parseBody() 之前&#xff0c;显式确保 Content-Type 包含 charsetUTF-8&#xff1a; Override public Response serve(IHTTPSession session) {Map<String, String> files n…...

AI学习方法论--AI费曼学习法:让AI扮演3个角色,把知识刻进脑子

很多人都有这样的经历&#xff1a;刚看完一本书&#xff0c;感觉自己什么都懂了。结果一周以后&#xff0c;别人问你学到了什么&#xff0c;你支支吾吾半天&#xff0c;说不出个所以然。 为什么&#xff1f; 因为你只是"看过"&#xff0c;不是"学会"。 今天…...

SagerNet数据库架构完全指南:Room与DataStore在代理工具中的最佳实践

SagerNet数据库架构完全指南&#xff1a;Room与DataStore在代理工具中的最佳实践 SagerNet作为Android平台上的通用代理工具链&#xff0c;其强大的数据库架构设计是其核心竞争力的关键。通过深入分析SagerNet的Room数据库与DataStore的完美结合&#xff0c;我们可以了解现代A…...

NideShop物流配送系统:如何实现订单发货与快递跟踪的完美集成

NideShop物流配送系统&#xff1a;如何实现订单发货与快递跟踪的完美集成 【免费下载链接】nideshop NideShop 开源微信小程序商城服务端 API&#xff08;Node.js ThinkJS&#xff09; 项目地址: https://gitcode.com/gh_mirrors/ni/nideshop NideShop是一个基于Node.j…...

Thymeleaf项目部署指南:从开发到生产环境的完整流程

Thymeleaf项目部署指南&#xff1a;从开发到生产环境的完整流程 【免费下载链接】thymeleaf Thymeleaf is a modern server-side Java template engine for both web and standalone environments. 项目地址: https://gitcode.com/gh_mirrors/th/thymeleaf Thymeleaf是一…...

阿姆智创15.6寸工控一体机厂家,源头智造ODM定制方案,赋能SMT产线及设备场景

阿姆智创15.6寸工业触控工控一体机&#xff0c;以强悍硬件性能、丰富工业接口、稳定系统适配与一站式解决方案&#xff0c;深度服务SMT产线、运动控制、机器视觉等工业场景&#xff0c;为设备厂商与制造企业提供高可靠、可定制、易集成的智能控制终端&#xff0c;助力工业自动化…...