Python 绘制圆锥体(3D图)

Python 绘制圆锥体(3D图)

圆锥体是几何中简单而漂亮的图形,Python具有强大的作图功能,但最近在试着用Python作图,发现很少文章介绍如何使用Python画圆锥体。
Python作图的大部分文档都是介绍2D作图,介绍3D作图,大部分是使用meshgrid函数生成方形范围的数据,然后调用Axes3D的函数就完成了,这种做法的确简单有效,但遇到圆锥体、圆柱体这类3D图形,则往往束手无策。
圆锥体几何图形很简单,用Matlab画圆锥体只要5行代码:

使用Matlab绘制圆锥的立体图(Cone’s graph)

那么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()

结果图形如下所示,太漂亮了!
在这里插入图片描述

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

二粒米

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值