花纹的生成可以使用贴图的方式,同样也可以使用方程,本文列出了几种常用曲线的方程式,以取代贴图方式完成特定花纹的生成。

注意极坐标的使用.................

顾名思义,蝴蝶曲线(Butterfly curve )就是曲线形状如同蝴蝶。蝴蝶曲线如图所示,以方程描述,是一条六次平面曲线。如果大家觉得这个太过简单,别着急,还有第二种。如图所示,以方程描述,这是一个极坐标方程。通过改变这个方程中的变量θ,可以得到不同形状与方向的蝴蝶曲线。如果再施以复杂的组合和变换,我们看到的就完全称得上是一幅艺术品了。

Python代码:

import numpy as np

import matplotlib.pyplot as plt

import os,sys,caffe

import matplotlib as mpl

from mpl_toolkits.mplot3d import Axes3D #draw lorenz attractor

# %matplotlib inline

from math import sin, cos, pi

import math

def mainex():

#drawSpringCrurve();#画柱坐标系螺旋曲线

#HelicalCurve();#采用柱坐标系#尖螺旋曲线

#Votex3D();

#phoenixCurve();

#ButterflyCurve();

#ButterflyNormalCurve();

#dicareCurve2d();

#WindmillCurve3d();

#HelixBallCurve();#球面螺旋线

#AppleCurve();

#HelixInCircleCurve();#使用scatter,排序有问题

seperialHelix();

def drawSpringCrurve():

#碟形弹簧

#圓柱坐标

#方程:

#import matplotlib as mpl

#from mpl_toolkits.mplot3d import Axes3D

#import numpy as np

#import matplotlib.pyplot as plt

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

# Prepare arrays x, y, z

#theta = np.linspace(-4 * np.pi, 4 * np.pi, 100)

#z = np.linspace(-2, 2, 100)

#r = z**2 + 1

t = np.arange(0,100,1);

r = t*0 +20;

theta = t*3600 ;

z = np.arange(0,100,1);

for i in range(100):

z[i] =(sin(3.5*theta[i]-90))+24*t[i];

x = r * np.sin(theta);

y = r * np.cos(theta);

ax.plot(x, y, z, label='SpringCrurve');

ax.legend();

plt.show();

def HelicalCurve():

#螺旋曲线#采用柱坐标系

t = np.arange(0,100,1);

r =t ;

theta=10+t*(20*360);

z =t*3;

x = r * np.sin(theta);

y = r * np.cos(theta);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='HelicalCurve');

ax.legend();

plt.show();

def ButterflyCurve():

#蝶形曲线,使用球坐标系#或许公式是错误的,应该有更加复杂的公式

t = np.arange(0,4,0.01);

r = 8 * t;

theta = 3.6 * t * 2*1 ;

phi = -3.6 * t * 4*1;

x = t*1;

y = t*1;

#z = t*1;

z =0

for i in range(len(t)):

x[i] = r[i] * np.sin(theta[i])*np.cos(phi[i]);

y[i] = r[i] * np.sin(theta[i])*np.sin(phi[i]);

#z[i] = r[i] * np.cos(theta[i]);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='ButterflyCurve');

#ax.scatter(x, y, z, label='ButterflyCurve');

ax.legend();

plt.show();

def ButterflyNormalCurve():

#蝶形曲线,使用球坐标系#或许公式是错误的,应该有更加复杂的公式

#螺旋曲线#采用柱坐标系

#t = np.arange(0,100,1);

theta=np.arange(0,6,0.1);#(0,72,0.1);

r =theta*0;

z =theta*0;

x =theta*0;

y =theta*0;

for i in range(len(theta)):

r[i] = np.power(math.e,sin(theta[i]))- 2*cos(4*theta[i])

+ np.power( sin(1/24 * (2*theta[i] -pi ) ) , 5 );

#x[i] = r[i] * np.sin(theta[i]);

#y[i] = r[i] * np.cos(theta[i]);

x = r * np.sin(theta);

y = r * np.cos(theta);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='ButterflyNormalCurve');

ax.legend();

plt.show();

def phoenixCurve():

#蝶形曲线,使用球坐标系

t = np.arange(0,100,1);

r = 8 * t;

theta = 360 * t * 4 ;

phi = -360 * t * 8;

x = t*1;

y = t*1;

z = t*1;

for i in range(len(t)):

x[i] = r[i] * np.sin(theta[i])*np.cos(phi[i]);

y[i] = r[i] * np.sin(theta[i])*np.sin(phi[i]);

z[i] = r[i] * np.cos(theta[i]);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='phoenixCurve');

ax.legend();

plt.show();

def dicareCurve2d():

r = np.arange(0, 2, 0.01)

theta = 2 * np.pi * r

ax = plt.subplot(111, projection='polar')

ax.plot(theta, r)

ax.set_rmax(2)

ax.set_rticks([0.5, 1, 1.5, 2]) # Less radial ticks

ax.set_rlabel_position(-22.5) # Move radial labels away from plotted line

ax.grid(True)

ax.set_title("dicareCurve2d", va='bottom')

plt.show();

def WindmillCurve3d():

#风车曲线

t = np.arange(0,2,0.01);

r =t*0+1 ;

#r=1

ang =36*t;#ang =360*t;

s =2*pi*r*t;

x = t*1;

y = t*1;

for i in range(len(t)):

x[i] = s[i]*cos(ang[i]) +s[i]*sin(ang[i]) ;

y[i] = s[i]*sin(ang[i]) -s[i]*cos(ang[i]) ;

z =t*0;

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='WindmillCurve3d');

ax.legend();

plt.show();

def HelixBallCurve():

#螺旋曲线,使用球坐标系

t = np.arange(0,2,0.005);

r =t*0+4 ;

theta =t*1.8

phi =t*3.6*20

x = t*1;

y = t*1;

z = t*1;

for i in range(len(t)):

x[i] = r[i] * np.sin(theta[i])*np.cos(phi[i]);

y[i] = r[i] * np.sin(theta[i])*np.sin(phi[i]);

z[i] = r[i] * np.cos(theta[i]);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='HelixBallCurve');

ax.legend();

plt.show();

def seperialHelix():

#螺旋曲线,使用球坐标系

t = np.arange(0,2,0.1);

n = np.arange(0,2,0.1);

r =t*0+4 ;

theta =n*1.8 ;

phi =n*3.6*20;

x = t*0;

y = t*0;

z = t*0;

for i in range(len(t)):

x[i] = r[i] * np.sin(theta[i])*np.cos(phi[i]);

y[i] = r[i] * np.sin(theta[i])*np.sin(phi[i]);

z[i] = r[i] * np.cos(theta[i]);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='ButterflyCurve');

ax.legend();

plt.show();

def AppleCurve():

#螺旋曲线

t = np.arange(0,2,0.01);

l=2.5

b=2.5

x = t*1;

y = t*1;

z =0;#z=t*0;

n = 36

for i in range(len(t)):

x[i]=3*b*cos(t[i]*n)+l*cos(3*t[i]*n)

y[i]=3*b*sin(t[i]*n)+l*sin(3*t[i]*n)

#x = r * np.sin(theta);

#y = r * np.cos(theta);

mpl.rcParams['legend.fontsize'] = 10;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='AppleCurve');

ax.legend();

plt.show();

def HelixInCircleCurve():

#园内螺旋曲线#采用柱坐标系

t = np.arange(-1,1,0.01);

theta=t*36 ;#360 deta 0.005鸟巢网 #36 deta 0.005 圆内曲线

x = t*1;

y = t*1;

z = t*1;

r = t*1;

n = 1.2

for i in range(len(t)):

r[i]=10+10*sin(n*theta[i]);

z[i]=2*sin(n*theta[i]);

x[i] = r[i] * np.sin(theta[i]);

y[i] = r[i] * np.cos(theta[i]);

mpl.rcParams['legend.fontsize'] = 3;

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.plot(x, y, z, label='HelixInCircleCurve');

#ax.scatter(x, y, z, label='HelixInCircleCurve');

ax.legend();

plt.show();

def Votex3D():

def midpoints(x):

sl = ()

for i in range(x.ndim):

x = (x[sl + np.index_exp[:-1]] + x[sl + np.index_exp[1:]]) / 2.0

sl += np.index_exp[:]

return x

# prepare some coordinates, and attach rgb values to each

r, g, b = np.indices((17, 17, 17)) / 16.0

rc = midpoints(r)

gc = midpoints(g)

bc = midpoints(b)

# define a sphere about [0.5, 0.5, 0.5]

sphere = (rc - 0.5)**2 + (gc - 0.5)**2 + (bc - 0.5)**2 < 0.5**2

# combine the color components

colors = np.zeros(sphere.shape + (3,))

colors[..., 0] = rc

colors[..., 1] = gc

colors[..., 2] = bc

# and plot everything

fig = plt.figure();

ax = fig.gca(projection='3d');

ax.voxels(r, g, b, sphere,

facecolors=colors,

edgecolors=np.clip(2*colors - 0.5, 0, 1), # brighter

linewidth=0.5);

ax.set(xlabel='r', ylabel='g', zlabel='b');

plt.show();

def drawFiveFlower():

theta=np.arange(0,2*np.pi,0.02)

#plt.subplot(121,polar=True)

#plt.plot(theta,2*np.ones_like(theta),lw=2)

#plt.plot(theta,theta/6,'--',lw=2)

#plt.subplot(122,polar=True)

plt.subplot(111,polar=True)

plt.plot(theta,np.cos(5*theta),'--',lw=2)

plt.plot(theta,2*np.cos(4*theta),lw=2)

plt.rgrids(np.arange(0.5,2,0.5),angle=45)

plt.thetagrids([0,45,90]);

plt.show();

if __name__ == '__main__':

import argparse

mainex();

画图结果:

蝴蝶曲线python_ProE常用曲线方程:Python Matplotlib 版本代码(蝴蝶曲线)相关推荐

  1. python 画蝴蝶_ProE常用曲线方程:Python Matplotlib 版本代码(蝴蝶曲线)

    花纹的生成可以使用贴图的方式,同样也可以使用方程,本文列出了几种常用曲线的方程式,以取代贴图方式完成特定花纹的生成. 注意极坐标的使用................. 顾名思义,蝴蝶曲线(Butte ...

  2. ProE常用曲线方程:Python Matplotlib 版本代码(蝴蝶曲线)

    花纹的生成可以使用贴图的方式,同样也可以使用方程,本文列出了几种常用曲线的方程式,以取代贴图方式完成特定花纹的生成. 注意极坐标的使用................. 前面部分基础资料,参考:Pyt ...

  3. ProE常用曲线方程:Python Matplotlib 版本代码(玫瑰曲线)

    Pyplot教程:https://matplotlib.org/gallery/index.html#pyplots-examples 玫瑰曲线 文字描述 平面内,围绕某一中心点平均分布整数个正弦花瓣 ...

  4. ProE复杂曲线方程:Python Matplotlib 版本代码(L系统,吸引子和分形)

    对生长自动机的研究由来已久,并在计算机科学等众多学科中,使用元胞自动机的概念,用于生长模拟.而复杂花纹的生成,则可以通过重写一定的生长规则,使用生成式来模拟自然纹理.当然,很多纹理是由人本身设计的,其 ...

  5. python蝴蝶代码_ProE常用曲線方程:Python Matplotlib 版本代碼(蝴蝶曲線)

    花紋的生成可以使用貼圖的方式,同樣也可以使用方程,本文列出了幾種常用曲線的方程式,以取代貼圖方式完成特定花紋的生成. 注意極坐標的使用................. 顧名思義,蝴蝶曲線(Butte ...

  6. 显示2位小数 python3_自动化常用语言python,版本3和2有何变化?

    黑马程序员视频库 播妞微信号:boniu236 传智播客旗下互联网资讯.学习资源免费分享平台 Python 3 代表 Python 语言进化的一个产物,所以它不会执行大多数针对 Python 2.x ...

  7. python绘制曲线视频_使用Python绘制各种优美简单曲线

    matplotlib是著名的Python绘图库,它提供了一整套绘图API,十分适合交互式绘图.,解决数据分析和可视化问题,其实也是Python的拿手好戏.另外,在数据处理过程中会用到numpy. 例如 ...

  8. python的turtle怎么画曲线_python怎么画曲线图,

    如何用python turtle 画n阶希尔伯特曲线 工大少年你好 Python如何画函数的曲线 输下导入我们用到数库. >>> import numpy as np >> ...

  9. python五角星编程代码绘制

    大家好,我是你们的好朋友,今天继续分享 Python的编程知识. 在 Python中,有一个非常强大的数据可视化工具: database. dl (),其中有一个功能就是可以绘制五角星. 什么是五角星 ...

最新文章

  1. 文件传输:二进制文件传输与文本传输(file transfer)
  2. centos7 搭建dhcp服务器
  3. windows server 2003中 如何限制用户修改计算机名,Windows命令行下修改文件访问控制权限 -电脑资料...
  4. 为什么说读博是最好的选择?
  5. 运维自动化之使用PHP+MYSQL+SHELL打造私有监控系统
  6. Linux -Docker
  7. 2022趋势洞见之“云网端融合”
  8. 什么是configmap资源、secret资源(实战)
  9. 【回波损耗(dB)和电压驻波比(VSWR)之间的关系】
  10. 微积分(六)——一元函数微分学
  11. 印前调色的基本规律及视觉效果
  12. Amazon Alexa系列介绍(1)--综述
  13. arcgis小班编号问题 工具箱来喽
  14. Graylog服务器docker安装
  15. 机器学习---决策树
  16. 华为服务器2288h v5安装系统,华为2288装系统
  17. Win10双显示器显示设置与输入信号超出范围解决方法
  18. eclipse 创建java窗体_eclipse新建窗体类
  19. Kali信息收集学习笔记
  20. mysql 2.71828_e值如何计算 2.71828

热门文章

  1. 【专场福利Part2】从多维度出发 保障提升实时音视频质量
  2. B端运营级视频服务技术平台搭建
  3. 【传统PSTN与互联网通信】
  4. MPEG创始人、主席:MEPG商业模式已经破裂
  5. 腾讯成联合国全球合作伙伴,TDSQL如何支撑史上最大规模全球会议
  6. 腾讯技术课|基于Elastic Stack 搭建日志分析平台
  7. nginx ngx_modules
  8. TensorFlow交叉熵
  9. 设置mac的全局命令
  10. 今天说说OPPO——OPPO 实时数仓揭秘:从顶层设计实现离线与实时的平滑迁移