L7-14 3D图形(一)

一、课堂导入

在之前的学习中我们学习了制作二维的平面图形,除了二维图形外还可制作3D立体图展示信息。

二、3D图形

1.概念

3D图形在数据分析、数据建模、图形和图像处理等领域中 都有着广泛的应用,

包括3D散点图、3D表面图、3D柱状图、 3D网状图、3D曲线图等。

2.绘图库-Matplotlib

Matplotlib 是 Python 的 2D绘图库,就像Pyecharts一样,可绘制 折线图、条形图、饼图、散点图等。

matplotlab.pyplot是用来绘图的子库,一般matplotlib.pyplot 设置为plt,调用更加方便。

案例1:

import matplotlib.pyplot as plt
#导入数据
plt.plot([1,2,3,4])
#显示模块中的所有绘图对象
plt.show()

结果:是一条递增的直线,为什么呢?

如果只传入一个list给plot(),它会认为这是y的值, 并自动生成x的值,又由于python计数以0开始,x 的长度与y一致,所以x的值为[0,1,2,3]。

案例2:

import matplotlib.pyplot as plt
plt.plot([1,2,3],[5,7,4])
plt.show()

说明:plot需要许多参数,但前两个是‘x‘‘y‘坐标,我们放入列表。 这意味着,根据这些列表我们拥有 3 个坐标:1,5  2,73,4

此时我们会发现我们需要大量数据,但是在列表中逐个输入参数效率太低,这时我们用numpy生成数组, 生成大批量的数据,快速满足需求。

3.Numpy

3.1 什么是数组

数组是在程序设计中,为了处理方便, 把具有相同类型的元素存储起来的集合。

NumPy(Numerical Python) 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。

Matplotlib 是 Python 的绘图库。 它可与 NumPy 一起使用,提供了一种有效的 MatLab 开源替代方案。

3.2 Numpy使用

import numpy as np
# 1.array()函数创建数组
n = np.array([1, 2, 3, 4]) 

# 2.zeros():创建全为0的数组,数组元素默认值是0.
n1 = np.zeros(10)
# 使用zeros函数创建一个全为0的10行10列数组。
n2 = np.zeros((10, 10))
# 按照n2创建一个数组
n3= np.zeros_like(n2) 

# 3.ones():创建全为1的数组,所有元素都为1的数组
n4 = np.ones(10)
# 使用ones函数创建一个全是1的形状为(3, 3)的2维数组
n5 = np.ones((3, 3))
# 按照n5创建一个数组
n6 = np.ones_like(n5)

# 4.arange()创建的NumPy数组,使用Numpy中类似于range的函数arange
# 产生0-9共10个元素的数组
n7 = np.arange(10)
#产生从10-19共10个元素的数组
n8 = np.arange(10, 20)
#产生10 12 14 16 18, 2为step间隔为2的数组
n9 = np.arange(10, 20, 2) 

# 5.empty() 创建空数组,填入任意值作为初始值
n10 = np.empty(5)
n10.fill(6.1) 

# 6.random模块创建随机数组
n11 = np.random.randint(5)
# random.randint():用于创建随机整数数组。
# 使用random.randint函数创建一个取值由0到10之间的5个整数组成的一维数组。
n12 = np.random.randint(0,10,5)

三、制作3D坐标轴图形

制作3D 图形时,我们需要使用matplotlib中的一个工具包(toolkits),mpl_toolkits.mplot3d是 可绘制三维图形的工具包,提供了基本的3D绘图功能,

支持的图表类型包括散点图、曲面图、网格图等,如果要为图表指定3D视图,要用Axes3D设置坐标轴。

1.3D坐标轴

通过我们的简单介绍,接下来我们将开始完成本节课3D图形的基本工作。

# 导入绘图用的模块
import matplotlib.pyplot as plt
# 画三维图的工具包mpl_toolkits.mplot3d
# Axes3D是mpl_toolkits.mplot3d中的一个绘图函数
from mpl_toolkits.mplot3d import Axes3D
# 建立画布,生成数据
fig=plt.figure()
#创建一个Axes对象,将二维转换为三维(有3D坐标)
ax=Axes3D(fig)
#显示图形
plt.show()

2. 3D散点图

2.1 简单散点图

# 1.简单三维散点图
# 导入numpy 库
import numpy as np
# 导入matplotlib库
import matplotlib.pyplot as plt
# # 画三维图的工具包mpl_toolkits.mplot3d
# # Axes3D是mpl_toolkits.mplot3d中的一个绘图函数
from mpl_toolkits.mplot3d import Axes3D
# 使用random.randint函数创建一个取值由0到24之间的20个整数组成的一维数组。
x = np.random.randint(0,24,20)
y = np.random.randint(0,24,20)
z = np.random.randint(0,24,20)
# 创建一个绘图对象
fig = plt.figure()
#二维转换为三维
ax = Axes3D(fig)
#设置标题
ax.set_title(‘Scatter Plot‘)
#修改颜色c及marker标记号".",",","o","v","^","<","1","8","p"
# c:色彩(b-blue,c-cyan,g-green,k-black,m-magenta,r-red,w-white,y-yellow)
# marker:方位形状
# 点,像素,圆形,倒三角,正三角,左三角,tri_down,八角形,五星
ax.scatter(x, y, z,c = "r", marker=("2"))
# 添加坐标轴(顺序是Z, Y, X)或不添加
ax.set_zlabel(‘Z‘)
ax.set_ylabel(‘Y‘)
ax.set_xlabel(‘X‘)
plt.show() 

2.2 复杂的散点图

# 导入需要的库
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
# 绘制3维的散点图
# # 使用random.randint函数创建一个取值由-到-之间的20个整数组成的一维数组。
x = np.random.randint(0,10,20)
y = np.random.randint(-20,20,20)
z = np.random.randint(0,30,20)
x1= np.random.randint(5,15,20)
y1= np.random.randint(0,20,20)
z1= np.random.randint(10,30,20)
# 创建一个绘图对象
fig = plt.figure()
#二维转换为三维
axes3d = Axes3D(fig)
axes3d.scatter(x, y, z,c = "r" ,marker=("*"))
axes3d.scatter(x1, y1, z1,c = "r" ,marker=("*"))
plt.show() 

四、总结

# 1. matplotlab.pyplot是用用来绘图的子库,一般matplotlib.pyplot 设置为plt
# 2.在绘图时,往往需要大批量的数据,在列表中逐个输入参数效率太低, 这时我们用numpy生成数组,生成大批量的数据,快速满足需求。
# 3.数组是在程序设计中,为了处理方便, 把具有相同类型的元素 存储起来的集合。

原文地址:https://www.cnblogs.com/xiaoxiao-ya/p/12559693.html

时间: 2024-07-31 18:15:26

L7-14 3D图形(一)的相关文章

(转载)3D 图形编程的数学基础(2) 矩阵及其运算

原文地址:http://blog.csdn.net/vagrxie/article/details/4974985 版权声明:本作品由九天雁翎创作,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可.http://www.jtianling.com 目录(?)[+] write by 九天雁翎(JTianLing) -- blog.csdn.NET/vagrxie 讨论新闻组及文件 Technorati 标签: 3D,matrix,irrlich,D3D,DirectX,math 矩阵

(转载)3D 图形编程的数学基础(3) 矩阵基本变换

原文地址:http://blog.csdn.net/vagrxie/article/details/5016143 版权声明:本作品由九天雁翎创作,采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可.http://www.jtianling.com 目录(?)[+] write by 九天雁翎(JTianLing) -- blog.csdn.NET/vagrxie 讨论新闻组及文件 这里开始,是真正的与3D图形编程相关的知识了,前两节只能算是纯数学. 平移矩阵 要想将向量(x, y,

3D图形:坐标变换

引言 在3D图形学中,经常需要进行坐标变换的操作.所以,作为学习者,很有必要将坐标变换的原理掌握.在3D渲染流水线中,有很多的变换,基本上都是从一个坐标空间变换到另外一个坐标空间的.既然坐标变换在3D中用的如此的多,那么就应该详细的了解坐标变换的原理.这有助于我们理解3D流水线中的各种变换过程. 坐标变换 在DirectX 9.0读书笔记(1)向量一文中,详细的讲述了如何将A坐标系里面的坐标点变换到B坐标系中去.这里直接使用文章的结论,即:如果我们在A坐标系中有一个向量或者点,那么如何用在B坐标

向经典致敬,WHY翻写3D图形程序 [开源]

个人认为学习3D图形程序开发,有两套经典教程.D3D的<D3D游戏开发编程基础>也就是红龙那本书.OpenGL的NEHE教程.为向经典致敬,将我之前翻写他们的程序开源. 我所做的工作是将其所有的DEMO集成到一个项目中.所有的DEMO使用同一个渲染设备.这样可以在一个进程中自由地切换DEMO.写这套东西最大的麻烦是,每一个DEMO对渲染设备状态做出的改变,在其退出时需要恢复回去.这看上去很容易,但当出现问题时查起来却很麻烦,因为教程中的DEMO实在是太多了.最常见的问题是渲染效果不对了,这在搞

3d图形的概念跟渲染管线

GPU和Shader技术的基础知识(全8回) http://www.opengpu.org/forum.php?mod=viewthread&tid=7376&extra=page%3D1 http://www.opengpu.org/bbs/forum.php?mod=viewthread&tid=7550&extra=page%3D1 3D图形的概念和渲染管线(Render Pipeline) 前面介绍了3D图形历史,接下来要解说的是3D图形的处理流程. 3D图形管线的

cad动态的2D/3D图形控件VectorDraw Developer Framework (VDF)

VectorDraw Developer Framework (VDF)为您的应用程序增加动态的2D/3D图形.是一个可轻松创建爱你和管理及打印2D和3D图形的构件. 其对象可显示与大多数公共矢量格式和其他CAD对象兼容的方法和属性. 支持10多种矢量格式和多种离散格式.VectorDraw Developer Framework (VDF) 是完全基于对象的和支持 .NET 2的. 此构件是用.NET 2005 C# 代码写成的. 同时还提供了一个ActiveX组件. 此ActiveX组件为旧

【翻译】西川善司「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,前篇(1)

http://www.4gamer.net/games/216/G021678/20140703095/ 新连载「实验做出的游戏图形」,是聚焦在特定游戏的图形上, 对它的结构和使用的技术解说为主旨.之前笔者连载的「西川善司的3D游戏入迷」,覆盖范围都很广,而与特定游戏强关联的技术解说,会在今后的新连载中处理. 作为纪念的第一回选择的,是Arc System Works开发的,2014年2月在街机上运作的格斗游戏「GUILTY GEAR Xrd -SIGN-」 全3D图形的GUILTY GEAR

【翻译】西川善司的「实验做出的游戏图形」「GUILTY GEAR Xrd -SIGN-」中实现的「纯卡通动画的实时3D图形」的秘密,后篇

http://www.4gamer.net/games/216/G021678/20140714079/ 连载第2回的本回,  Arc System Works开发的格斗游戏「GUILTY GEAR Xrd -SIGN-」解说的后篇送到了.前篇的最后预告的那样,本回,是只能看到Anime的3D图形的2D格斗游戏产生所采用的细小方法为中心的介绍. 变形的几何体,替换几何体 GUILTY GEAR Xrd -SIGN-的图形,看上去是Cel Anime风格,并不是什么都采用Toon Shader.这

3D图形图像处理软件HOOPS介绍及下载

HOOPS 3D Application Framework(以下简称HOOPS)是建立在OpenGL.Direct3D等图形编程接口之上的更高级别的应用程序框架.不仅为您提供强大的图形功能,还内嵌了多边形优化和大模型处理等技术,能够大大提高 3D可视化的性能.同时,HOOPS开发包中提供的大量应用程序级的实例源码,帮助您在很短的时间内搭建出商业级的3D图形应用程序. HOOPS 3D Application Framework (HOOPS/3dAF) 3D图形图像处理软件为当今许多主流 3D