python 二维矩阵画三维图_python 圆的二维图绘制 球体的三维图绘制 矩阵外积np.outer的应用...

圆的绘制

首先一个球体可以看作无数个小圆组合而成的,那么,我们是否能够使用这个想法将其绘制出来呢?答案是肯定的,同二维图的绘制不同的是,三维图的绘制较为复杂一点,需要采用网格的思想才能够将其绘制出来,在二维图中我们可以轻松的绘制出一个圆,如下图,使用圆的参数方程采用theta函数作为极坐标的参数绘制圆,代码如下:

import matplotlib.pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()

ax = fig.add_subplot(111)#一个画板一张图

r=1#直径为1

ax.set(xlim=[-r, r], ylim=[-r, r], title='circle',ylabel='Y-Axis', xlabel='X-Axis')

theta = np.arange(0, 2*np.pi, 0.01)#极坐标参数 取样间隔0.01

x = np.cos(theta)#坐标x

y = np.sin(theta)#坐标y

ax.plot(x,y)#绘制二维图

plt.show()#图片展示

结果:

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTMwOTM3,size_16,color_FFFFFF,t_70#pic_center

球体的绘制

参考二维圆的画法我们可以采用柱面坐标系的方法,在z轴上用依次绘制不同半径的圆来形成一个球,在这个过程中我们要用到矩阵外积的思想,将圆的余弦值或者正弦值与半径进行外积,形成一个二维矩阵,矩阵的第二维度中的每个向量储存每个小圆的信息。

矩阵外积( matC = numpy.outer(matA,matB) ):在求解矩阵matA,matB的外积的过程中,matA和matB先被变成一维向量vectorA,vectorB,然后再对两个向量进行内积np.dot(vectorA,vectorB)得到分别于vectorB每个元素相乘得到的二维矩阵matC。

在绘图的过程中,plot_surface(x,y,z)中要求的x,y,z矩阵必须是二维矩阵,也即是x,y,z的在z轴上的网格信息(用二维矩阵存储)。

代码如下:

import matplotlib.pyplot as plt

import numpy as np

from mpl_toolkits.mplot3d import Axes3D

fig = plt.figure()#创建画板

ax = fig.add_subplot(111, projection='3d')#分画板选项

o = np.array([0,0,0]) #圆心坐标

R = 1 #圆的直径为1

h = np.arange(-R,R,0.0001) # 把高度按0.0001进行采样

r = np.sqrt(R-h**2)#每个小圆对应的半径r

theta = np.arange(0, 2*np.pi, 0.01)#取样间隔0.01

x = np.outer(np.cos(theta),r)+o[0]#和每个小圆的半径进行外积得到每个小圆的x坐标,每个高度对应一个小圆的x

y = np.outer(np.sin(theta),r)+o[1]#和每个小圆的半径进行外积得到每个小圆的y坐标,每个高度对应一个小圆的y

z = np.outer(np.ones(len(theta)),h)+o[2]#和高度进行外积得到每个小圆的z坐标

ax.plot_surface(x, y, z, cmap=plt.get_cmap('rainbow'))#绘制球体

plt.show()#展示画板

结果

watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ0OTMwOTM3,size_16,color_FFFFFF,t_70#pic_center

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值