Python 绘制圆锥体(3D图)
圆锥体是几何中简单而漂亮的图形,Python具有强大的作图功能,但最近在试着用Python作图,发现很少文章介绍如何使用Python画圆锥体。
Python作图的大部分文档都是介绍2D作图,介绍3D作图,大部分是使用meshgrid函数生成方形范围的数据,然后调用Axes3D的函数就完成了,这种做法的确简单有效,但遇到圆锥体、圆柱体这类3D图形,则往往束手无策。
圆锥体几何图形很简单,用Matlab画圆锥体只要5行代码:
那么Python是否具备这种功能?答案是肯定的。
关键是提供合适的数据给Axes3D的函数。以底面在上,顶点在原点,半径和高度均为1的圆锥体为例(这个例子相对简单易懂),圆锥体面上的每个点,其高度正好是该点在平面上到中心原点的距离,而平面上每个点则是圆形上的一个点。圆形当然不能用方形表示,但用极坐标表示则很简单,所以可以定义极坐标,为每个点的x,y生成相应数据,并根据x,y计算出z的值。
详细代码和结果图如下。
# -*- coding: utf-8 -*-
#每天给自己一个希望,试着不为明天而烦恼,不为昨天而叹息,只为今天更美好!
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')
# 生成圆锥数据,底面半径为1,高度为1,其余的情形留待发挥
# 先根据极坐标方式生成数据
u = np.linspace(0, 2 * np.pi, 50) #linspace的功能用来创建等差数列
v = np.linspace(0, np.pi, 50)
# 数据转化为平面坐标数据
x = np.outer(np.cos(u), np.sin(v)) # outer(a,b) 外积:a的每个元素乘以b的每个元素,二维数组
y = np.outer(np.sin(u), np.sin(v))
z = np.sqrt(x**2+y**2) #圆锥体的高
# Plot the surface
ax.plot_surface(x, y, z, cmap=plt.get_cmap('rainbow'))
plt.show()
结果图形如下所示,太漂亮了!