网络编程
位置:首页>> 网络编程>> Python编程>> 基于Python绘制3D立体爱心图案的示例详解

基于Python绘制3D立体爱心图案的示例详解

作者:弦masamasa  发布时间:2021-04-03 18:05:09 

标签:Python,3D,爱心

原理

1.使用python中的mtplotlib库。

2.立体爱心面公式

基于Python绘制3D立体爱心图案的示例详解

点画法(实心)

代码

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

运行效果

基于Python绘制3D立体爱心图案的示例详解

这个画法侧面看起来很无语。

基于Python绘制3D立体爱心图案的示例详解

点画法(空心)

代码

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**3
           if 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()

运行效果

基于Python绘制3D立体爱心图案的示例详解

折线画法 (线团)

代码

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**3
           if 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()

运行效果

基于Python绘制3D立体爱心图案的示例详解

等高线画法(线框)

代码

from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter
import matplotlib.pyplot as plt
import numpy as np

def 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**3

def plot_implicit(fn, bbox=(-1.5, 1.5)):
   xmin, xmax, ymin, ymax, zmin, zmax = bbox*3
   fig = plt.figure()
   ax = fig.add_subplot(projection='3d')
   A = np.linspace(xmin, xmax, 100)  # resolution of the contour
   B = np.linspace(xmin, xmax, 10)  # number of slices
   A1, A2 = np.meshgrid(A, A)  # grid on which the contour is plotted

for z in B:  # plot contours in the XY plane
       X, Y = A1, A2
       Z = 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 plane
       X, Z = A1, A2
       Y = 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 plane
       Y, Z = A1, A2
       X = 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立体爱心图案的示例详解

以上代码整理于网络,需要的小伙伴可以参考一下

来源:https://blog.csdn.net/zulumasaya/article/details/126714799

0
投稿

猜你喜欢

  • 本文实例为大家分享了PyQt5实现暗黑风格的计时器的具体代码,供大家参考,具体内容如下主要是学习多线程知识,使用的是QTime(),但是似乎
  • centos7之Python3.74安装安装版本:Python3.74系统版本:centos7系统默认安装Python2.7,保留。安装/u
  • 段落已经讲完了,那么一些基本的应用方式也讲了一些,那么是否已经应用了呢?当然应用可以更为丰富,那么这些就需要自己在实际工作中不断的摸索与思考
  • 前言:任何一个编程者都少不了要去调试代码,不管你是高手还是菜鸟,调试程序都是一项必不可少的工作。一般来说调试程序是在编写代码之后或测试期修改
  • 代码如下:<html>        <head>   &nb
  • 当然首先得去下载ASPupload 程序,安装后使用!官方网站下载:http://www.aspupload.com/使用ASP实现文件上载
  • 在用户注册中最常见的安全验证之一就是邮箱验证。根据行业的一般做法,进行邮箱验证是避免潜在的安全隐患一种非常重要的做法,现在就让我们来讨论一下
  • <table width="636" border="0" align="cente
  • 本文实例为大家分享了python代码实现猜拳小游戏的具体代码,供大家参考,具体内容如下游戏实现具体功能原有的用户登录的信息均能保存在txt文
  • 每位SQL Server开发员都有自己的首选操作方法。我的方法叫做分子查询。这些是由原子查询组合起来的查询,通过它们我可以处理一个表格。将原
  • 检测缺失值我们先创建一个带有缺失值的数据框(DataFrame)。import pandas as pddf = pd.DataFrame(
  • 安装很简单pip install psutil官网地址为:https://pythonhosted.org/psutil/ (文档上有详细的
  •     使用库元素必须首先在DW中正确建立站点。 库被设计用来使重复性的工作更快、更容易并尽可能地无差错。 任
  • SQL Server的作业调度来建立自动备份的方法◆1、进入企业管理器中->管理->sql server代理->作业;◆2
  • 引子之前在学习Django时,对状态保持这个概念很模糊,不知道怎么去保持,通过什么去实现保持都不太清楚;稍微花了一点时间,把状态保持的基本概
  • 本文列举了兼容 IE 和 FF 的换行 CSS 推荐样式,详细介绍了word-wrap同word-break的区别。兼容 IE 和 FF 的
  • 一、数组的创建方式一var a = new Array(); a[0]="wo"
  • 相信有很多人有用程序向Excel导数据的需求, 且做过. 一般导出一些文本数据是很方便的, 可选方法很多, 比如拼接文本字符串存.cvs格式
  • 本文主要给大家介绍了关于Python中getpass模块的相关内容,分享出来供大家参考学习,话不多说了,来一起看看详细的介绍:getpass
  • CSV文件简单来说CSV文件由任意数目的记录组成,记录间以某种换行符分隔;每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗
手机版 网络编程 asp之家 www.aspxhome.com