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)

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

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

相关文章

代码随想录训练营 Day58打卡 图论part08 拓扑排序 dijkstra朴素版 + 堆优化版

代码随想录训练营 Day58打卡 图论part08 一、拓扑排序 例题:卡码117. 软件构建 题目描述 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果…

勇于尝试,永远行动 - 《洛克菲勒写给儿子的38封信》读书笔记

两倍速听过好几遍的书,洛克菲勒的思想和志向,配得上他的成就。 “在尝试中寻找突破,在行动中成就自我。”这是洛克菲勒写给儿子的箴言,也是他一生的真实写照。在这38封信中,他不仅分享了自己的工作心得,更…

完整版订单超时自动取消功能

前几天对实习还是继续学习技术产生了抉择,问了一个前辈,他抛给我一个问题,怎么做15分钟订单自动取消,我说然后到时间之后,自动执行这个订单关闭业务,比如把锁了的库存给解开等等操作,然后在数据…

VTD激光雷达(3)——04_OptiX_SimulationDataFlow

文章目录 前言一、总结 前言 一、 1 总结

synchronized的详解、锁的升级过程和优缺点比较

本文 详细介绍Java中为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级 锁、重量级锁,以及锁升级过程。 Java中每一个对象都可以作为锁。具体表现形式为以下三种形式: 对于普通的同步方法,锁是当前的实例对象对于静态同步方法&a…

cJSON-轻量级解析模块、字符串的神——编织STM32C8T6与阿里云信息传递的纽带

编写方向:本人就不泛泛的编写一篇什么一文学会cJSON了,没什么突出点,也就我水水字数,你们看来看去也不懂,本人是从上阿里云传信息接触的cJSON的,我就此写一篇针对性的文章,希望对大家有用&#…

研1日记12

1. 改19->10 2. 学习数据不平衡问题 1. 欠采样 合并两个样本数据 两种方式 1. 按原分布比例划分。sklearn中train_test_split里,参数stratify含义解析_traintestsplit参数stratify-CSDN博客 3.刘二大人 卷积操作 待看论文: 刘老师指导&#xff1a…

用于稀疏自适应深度细化的掩码空间传播网络 CVPR2024

目录 Masked Spatial Propagation Network for Sparsity-Adaptive Depth Refinement (CVPR 2024)用于稀疏自适应深度细化的掩码空间传播网络1 介绍2 算法流程2.1 问题建模2.2 Guidance Network2.3 MSPN 模块 3 实验结果3.1 稀疏度自适应深度细化对比试验…

图论篇--代码随想录算法训练营第六十一天打卡| Floyd 算法,A*算法

Floyd 算法(求多源汇最短路) 题目链接:97. 小明逛公园 题目描述: 小明喜欢去公园散步,公园内布置了许多的景点,相互之间通过小路连接,小明希望在观看景点的同时,能够节省体力&…

计算机二级office操作技巧——Excel篇

文章目录 函数公式总结写在前面五大基本函数sum求和函数average求平均函数max求最大值函数min求最小值函数count求个数函数 rank排名函数if逻辑判断函数条件求个数函数countif单条件求个数函数countifs多条件求个数函数 条件求和函数sumifs多条件求和函数sumproduct乘积求和函数…

算法刷题[比较两个字符串的最大公字符串(滑动窗口实现)]

题目&#xff1a;编程实现&#xff1a;找出两个字符串中最大公共子字符串,如"abccade","dgcadde"的最大子串为"cad" 代码如下所示&#xff1a; #define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #include <string.h> #inclu…

C语言实现贪吃蛇小游戏

✅博客主页:爆打维c-CSDN博客​​​​​​ &#x1f43e; &#x1f539;分享c语言知识及代码 &#x1f43e; 目录 游戏展示视频 一、项目准备工作 二、功能实现分析 1.游戏开始 a.设置本地化、创建窗口、标题 b.隐藏光标,封装定位光标的函数 c.打印欢迎界面及提示信息 …

网盘隐私照片泄露?教你如何保护自己的隐私照片!

网盘内的隐私照片 好兄弟最近遇到了一个困难&#xff1a;“我之前一直都是把照片存在网盘里面的&#xff0c;但是最近听说了某网盘的照片泄露了&#xff0c;自己的生活照啊&#xff0c;私密照啊都被人看光了&#xff0c;这太可怕了&#xff01;我现在也很担心自己的网盘上照片…

2021高教社杯全国大学生数学建模竞赛C题 Python代码演示

目录 问题一1.1 根据附件 1&#xff0c;对 402 家供应商的供货特征进行量化分析计算供货特征数据标准化对正向指标归一化对负向指标归一化 1.2 建立反映保障企业生产重要性的数学模型熵权法熵权法-TOPSISAHP 1.3 在此基础上确定 50 家最重要的供应商&#xff0c;并在论文中列表…

钢轨缺陷检测-目标检测数据集(包括VOC格式、YOLO格式)

钢轨缺陷检测-目标检测数据集&#xff08;包括VOC格式、YOLO格式&#xff09; 数据集&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1h7Dc0MiiRgtd7524cBUOFQ?pwdfr9y 提取码&#xff1a;fr9y 数据集信息介绍&#xff1a; 共有 1493 张图像和一一对应的标注文件 标…

Neo4j入门案例:三星堆

创建一个关于三星堆的知识图谱可以是一个非常有趣的项目&#xff0c;它可以帮助理解如何使用Neo4j来存储和查询复杂的关系数据。三星堆文化以其独特的青铜器、金器和其他文物而闻名&#xff0c;这为我们提供了一个丰富的历史背景来构建知识图谱。 数据模型定义 实体类型&#…

RTMP直播播放器的几种选择

如何选择RTMP播放器&#xff1f; 在选择RTMP播放器时&#xff0c;需要综合考虑多个因素&#xff0c;以确保选择的播放器能够满足实际需求并提供良好的用户体验。以下是一些选择RTMP播放器的建议&#xff1a; 1. 功能需求 低延迟&#xff1a;对于直播场景&#xff0c;低延迟是…

解读 Java 经典巨著《Effective Java》90条编程法则,第5条:优先考虑依赖注入来引用资源

【前言】欢迎订阅【解读《Effective Java》】系列专栏 《Effective Java》是 Java 开发领域的经典著作&#xff0c;作者 Joshua Bloch 以丰富的经验和深入的知识&#xff0c;全面探讨了 Java 编程中的最佳实践。这本书被公认为 Java 开发者的必读经典&#xff0c;对提升编码技…

STM32巡回研讨会总结(2024)

前言 本次ST公司可以说是推出了7大方面&#xff0c;几乎可以说是覆盖到了目前生活中的方方面面&#xff0c;下面总结下我的感受。无线类 支持多种调制模式&#xff08;LoRa、(G)FSK、(G)MSK 和 BPSK&#xff09;满足工业和消费物联网 (IoT) 中各种低功耗广域网 (LPWAN) 无线应…

MelosBoom:解锁数据价值的新纪元

在当今的数字时代&#xff0c;数据被誉为“新的石油”&#xff0c;但用户在传统的Web2环境中&#xff0c;往往无法真正享受到自己贡献数据的价值。大型互联网公司通过集中化的系统和算法&#xff0c;垄断了数据的使用权&#xff0c;并从中获取巨大的商业利益&#xff0c;而数据…