使用python画3D立体爱心
原理
1.使用python中的mtplotlib库。
2.立体爱心面公式
(x2+94y2+z2−1)3−980y2∗z3−x2∗z3=0(x^2+\frac{9}{4}y^2+z^2-1)^3-\frac{9}{80}y^2*z^3-x^2*z^3=0 (x2+49y2+z2−1)3−809y2∗z3−x2∗z3=0
点画法(实心)
代码
import matplotlib.pyplot as plt #导入绘图模块
from mpl_toolkits.mplot3d import Axes3D #3d绘图模块
import numpy as np #导入数值计算拓展模块#start generating points
x_lim=np.linspace(-10,10,150)
y_lim=np.linspace(-10,10,150)
z_lim=np.linspace(-10,10,150)
X_points=[] #用来存放绘图点X坐标
Y_points=[] #用来存放绘图点Y坐标
Z_points=[] #用来存放绘图点Z坐标
for x in x_lim:for y in y_lim:for z in z_lim:if (x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3<=0:X_points.append(x)Y_points.append(y)Z_points.append(z)plt.style.use('seaborn')
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
ax.scatter(X_points,Y_points,Z_points,color="red")
plt.show()
运行效果
这个画法侧面看起来很无语。
点画法(空心)
代码
import matplotlib.pyplot as plt #导入绘图模块
from mpl_toolkits.mplot3d import Axes3D #3d绘图模块
import numpy as np #导入数值计算拓展模块#start generating points
x_lim=np.linspace(-10,10,200)
y_lim=np.linspace(-10,10,200)
z_lim=np.linspace(-10,10,200)
X_points=[] #用来存放绘图点X坐标
Y_points=[] #用来存放绘图点Y坐标
Z_tmp=[]
Z_points=[] #用来存放绘图点Z坐标
for y in y_lim:for x in x_lim:for z in z_lim:k=(x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3if k<=0 :Z_tmp.append(z)if y<=-0.55 or y>=0.55:X_points.append(x)Y_points.append(y) Z_points.append(z)if Z_tmp:X_points.append(x)Y_points.append(y) Z_points.append(max(Z_tmp))X_points.append(x)Y_points.append(y) Z_points.append(min(Z_tmp))Z_tmp.clear()plt.style.use('seaborn')
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
ax.set_zlim(-1, 1)
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.scatter(X_points,Y_points,Z_points)plt.show()
运行效果
折线画法 (线团)
代码
import matplotlib.pyplot as plt #导入绘图模块
from mpl_toolkits.mplot3d import Axes3D #3d绘图模块
import numpy as np #导入数值计算拓展模块#start generating points
x_lim=np.linspace(-10,10,150)
y_lim=np.linspace(-10,10,150)
z_lim=np.linspace(-10,10,150)
X_points=[] #用来存放绘图点X坐标
Y_points=[] #用来存放绘图点Y坐标
Z_tmp=[]
Z_points=[] #用来存放绘图点Z坐标
for y in y_lim:for x in x_lim:for z in z_lim:k=(x**2+(9/4)*y**2+z**2-1)**3-(9/80)*y**2*z**3-x**2*z**3if k<=0 :Z_tmp.append(z)if y<=-0.55 or y>=0.55:X_points.append(x)Y_points.append(y) Z_points.append(z)if Z_tmp:X_points.append(x)Y_points.append(y) Z_points.append(max(Z_tmp))X_points.append(x)Y_points.append(y) Z_points.append(min(Z_tmp))Z_tmp.clear()plt.style.use('seaborn')
fig=plt.figure()
ax=fig.add_subplot(111,projection='3d')
ax.set_zlim(-1, 1)
ax.set_xlim(-1, 1)
ax.set_ylim(-1, 1)
ax.plot(X_points,Y_points,Z_points)plt.show()
运行效果
等高线画法(线框)
代码
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as npdef heart_3d(x, y, z):return (x**2+(9/4)*y**2+z**2-1)**3-x**2*z**3-(9/80)*y**2*z**3def plot_implicit(fn, bbox=(-1.5, 1.5)):xmin, xmax, ymin, ymax, zmin, zmax = bbox*3fig = plt.figure()ax = fig.add_subplot(projection='3d')A = np.linspace(xmin, xmax, 100) # resolution of the contourB = np.linspace(xmin, xmax, 10) # number of slicesA1, A2 = np.meshgrid(A, A) # grid on which the contour is plottedfor z in B: # plot contours in the XY planeX, Y = A1, A2Z = fn(X, Y, z)cset = ax.contour(X, Y, Z+z, [z], zdir='z', colors=('r',))for y in B: # plot contours in the XZ planeX, Z = A1, A2Y = fn(X, y, Z)cset = ax.contour(X, Y+y, Z, [y], zdir='y', colors=('red',))for x in B: # plot contours in the YZ planeY, Z = A1, A2X = fn(x, Y, Z)cset = ax.contour(X+x, Y, Z, [x], zdir='x', colors=('red',))# must set plot limits because the contour will likely extend# way beyond the displayed level. Otherwise matplotlib extends the plot limits# to encompass all values in the contour.ax.set_zlim3d(zmin, zmax)ax.set_xlim3d(xmin, xmax)ax.set_ylim3d(ymin, ymax)plt.show()if __name__ == '__main__':plot_implicit(heart_3d)
运行效果
这么好看所以并不是我自己写的代码。
抄的网上,出处懒得找了(自我保护)。
使用python画3D立体爱心相关推荐
- Python画3D心形
Python 画3D心形图 原文 因为需要再打印中文,再原代码上做了修改,引入了字体文件. 代码 #coding=utf-8 #3D心形 from mpl_toolkits.mplot3d impor ...
- python画3D曲面图
python画3D曲面图 过程理解 参考程序 理解过程 坐标点画网格 python.np的命令集 过程理解 参考程序 import numpy as np import plotly.graph_ob ...
- python画3d心形_有了这几个3D立体手工教程,幼儿园手工作业再也不用愁!
大家都听说过3D纸模吗? 妈队今天带来了初级的3D纸模DIY教程非常有意思哦!可以做出很多立体效果的小玩意快来一起试试吧! 3D立体雪花 南方的宝宝不知道有没见过雪呢? 今天就教大家做一款立体雪花冬天 ...
- python画3d图-python3利用Axes3D库画3D模型图
Python3利用Axes3D库画3D模型图,供大家参考,具体内容如下 最近在学习机器学习相关的算法,用python实现.自己实现两个特征的线性回归,用Axes3D库进行建模. python代码 im ...
- python画3d圆形图_Python之Numpy:二元函数绘制/三维数据可视化/3D
意义 在机器学习任务中选择计算模型或者学习数学时,可视化有助于研究函数值的变化趋势(观察收敛.分布.几何形状等),带来直观的感受. 源码 # 绘制二元函数 # 参考文献 # + python画二元函数 ...
- python画一个动态爱心
可以使用 Python 的第三方库 matplotlib 和 numpy 来画出动态爱心. 首先,需要安装这两个库: pipinstall matplotlib pip install numpy 然 ...
- Python画3D足球2
文章目录 前情提要 补点 球形膨胀 前情提要 足球是正五边形和正六边形拼接而成,由此形成的骨架结构,可通过切割正二十面体获得,所以画足球的第一步是画正二十面体:Python绘制正二十面体 在学会绘制正 ...
- python画3d图-Python绘制3D图形
来自:https://www.jb51.net/article/139349.htm 3D图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行 ...
- python画3d圆形图,Python绘制3D图形
3d图形在数据分析.数据建模.图形和图像处理等领域中都有着广泛的应用,下面将给大家介绍一下如何使用python进行3d图形的绘制,包括3d散点.3d表面.3d轮廓.3d直线(曲线)以及3d文字等的绘制 ...
最新文章
- android 自动打开第三方应用程序,Android如何做到应用程序图标隐藏,由第三方程序显示启动...
- ViewPager+Fragment实现TabHost(可复用的类)
- 查理和政策配对工厂——设计一个问卷运算系统的B端到C端
- mysql 插入怎么知道id_如何知道刚刚插入数据库那条数据的id
- 如何向妻子解释OOD(转)
- 王道计算机网络 应用层整理 超详细版
- (转) Twisted :第十九部分 改变之前的想法
- Python3标准库:asyncio异步I/O、事件循环和并发工具
- 使用MisakaPatcher制作Galgame外挂汉化补丁
- MyBatis缓存介绍
- 摄像机产生“拖影”、“重影”的原因
- 网站接入服务器必须备案吗,服务器和域名必须备案吗
- 数据结构 算法与应用(c++ 描述) 自练答案
- 非学校用户如何免费下载论文
- as ssd测试软件得分少,教大家AS SSD Benchmark如何测试硬盘性能
- 如何写出完美的复试简历?没有科研竞赛经历怎么办?老师喜欢什么样的学生?跨考生?//2021-2-5
- 仿趣玩网五屏带标题的jQuery幻灯效果 分享
- pdf两个技能,缩略图和更改标题
- 论文阅读|基于领域知识图谱的多文档摘要生成与应用
- 2018EOS全球超级节点引力峰会:共识的力量
热门文章
- vue实现仿猫眼电影
- AE-预览的时候出现FPS非实时-解决办法
- 如何将视频压缩?快来看看这些方法
- MacOS QT qmake 与 CMake 设置ICON
- lisp边长注记,求一个标注断开的lisp 和标注合并
- C语言:学生信息管理系统(详解+源码)
- 台式计算机怎样连接电视机,完美:如何将计算机屏幕连接到电视?如何将台式计算机连接到电视...
- 64位计算机连不上打印机,WIN1064位网络打印机已成功连接,无法打印.
- 不用找,你想要的行业icon图标素材都在这里
- IC验证-浅谈中断验证(一)