原标题:如何用Python画各种著名数学图案 | 附图+代码

用Python绘制著名的数学图片或动画,展示数学中的算法魅力。

Mandelbrot 集

代码:46 lines (34 sloc) 1.01 KB

'''

A fast Mandelbrot set wallpaper renderer

reddit discussion: https://www.reddit.com/r/math/comments/2abwyt/smooth_colour_mandelbrot/

'''

importnumpy asnp

fromPILimportImage

fromnumba importjit

MAXITERS=200

RADIUS=100

@jit

defcolor(z, i):

v =np.log2(i +1-np.log2(np.log2(abs(z)))) /5

ifv <1.0:

returnv**4, v**2.5, v

else:

v =max(0, 2-v)

returnv, v**1.5, v**3

@jit

defiterate(c):

z =0j

fori inrange(MAXITERS):

ifz.real*z.real +z.imag*z.imag >RADIUS:

returncolor(z, i)

z =z*z +c

return0, 0,0

defmain(xmin, xmax, ymin, ymax, width, height):

x =np.linspace(xmin, xmax, width)

y =np.linspace(ymax, ymin, height)

z =x[None, :] +y[:, None]*1j

red, green, blue =np.asarray(np.frompyfunc(iterate, 1, 3)(z)).astype(np.float)

img =np.dstack((red, green, blue))

Image.fromarray(np.uint8(img*255)).save('mandelbrot.png')

if__name__=='__main__':

main(-2.1, 0.8, -1.16, 1.16, 1200, 960)

多米诺洗牌算法

代码链接:https://github.com/neozhaoliang/pywonderland/tree/master/src/domino

正二十面体万花筒

代码:53 lines (40 sloc) 1.24 KB

'''

A kaleidoscope pattern with icosahedral symmetry.

'''

importnumpy asnp

fromPILimportImage

frommatplotlib.colors importhsv_to_rgb

defKlein(z):

'''Klein's j-function'''

return1728*(z *(z**10+11*z**5-1))**5/

(-(z**20+1) +228*(z**15-z**5) -494*z**10)**3

defRiemannSphere(z):

'''

map the complex plane to Riemann's sphere via stereographic projection

'''

t =1+z.real*z.real +z.imag*z.imag

return2*z.real/t, 2*z.imag/t, 2/t-1

defMobius(z):

'''

distort the result image by a mobius transformation

'''

return(z -20)/(3*z +1j)

defmain(imgsize):

x =np.linspace(-6, 6, imgsize)

y =np.linspace(6, -6, imgsize)

z =x[None, :] +y[:, None]*1j

z =RiemannSphere(Klein(Mobius(Klein(z))))

#define colors in hsv space

H =np.sin(z[0]*np.pi)**2

S =np.cos(z[1]*np.pi)**2

V =abs(np.sin(z[2]*np.pi) *np.cos(z[2]*np.pi))**0.2

HSV=np.dstack((H, S, V))

#transform to rgb space

img =hsv_to_rgb(HSV)

Image.fromarray(np.uint8(img*255)).save('kaleidoscope.png')

if__name__=='__main__':

importtime

start =time.time()

main(imgsize=800)

end =time.time()

print('runtime: {:3f}seconds'.format(end -start))

Newton 迭代分形

代码:46 lines (35 sloc) 1.05 KB

importnumpy asnp

importmatplotlib.pyplot asplt

fromnumba importjit

#define functions manually, do not use numpy's poly1d funciton!

@jit('complex64(complex64)', nopython=True)

deff(z):

#z*z*z is faster than z**3

returnz*z*z -1

@jit('complex64(complex64)', nopython=True)

defdf(z):

return3*z*z

@jit('float64(complex64)', nopython=True)

defiterate(z):

num =0

whileabs(f(z)) >1e-4:

w =z -f(z)/df(z)

num +=np.exp(-1/abs(w-z))

z =w

returnnum

defrender(imgsize):

x =np.linspace(-1, 1, imgsize)

y =np.linspace(1, -1, imgsize)

z =x[None, :] +y[:, None] *1j

img =np.frompyfunc(iterate, 1, 1)(z).astype(np.float)

fig =plt.figure(figsize=(imgsize/100.0, imgsize/100.0), dpi=100)

ax =fig.add_axes([0, 0, 1, 1], aspect=1)

ax.axis('off')

ax.imshow(img, cmap='hot')

fig.savefig('newton.png')

if__name__=='__main__':

importtime

start =time.time()

render(imgsize=400)

end =time.time()

print('runtime: {:03f}seconds'.format(end -start))

李代数E8 的根系

代码链接:https://github.com/neozhaoliang/pywonderland/blob/master/src/misc/e8.py

模群的基本域

代码链接:

https://github.com/neozhaoliang/pywonderland/blob/master/src/misc/modulargroup.py

彭罗斯铺砌

代码链接:

https://github.com/neozhaoliang/pywonderland/blob/master/src/misc/penrose.py

Wilson 算法

代码链接:https://github.com/neozhaoliang/pywonderland/tree/master/src/wilson

反应扩散方程模拟

代码链接:https://github.com/neozhaoliang/pywonderland/tree/master/src/grayscott

120 胞腔

代码:69 lines (48 sloc) 2.18 KB

#pylint: disable=unused-import

#pylint: disable=undefined-variable

fromitertools importcombinations, product

importnumpy asnp

fromvapory import*

classPenrose(object):

GRIDS=[np.exp(2j*np.pi *i /5) fori inrange(5)]

def__init__(self, num_lines, shift, thin_color, fat_color, **config):

self.num_lines =num_lines

self.shift =shift

self.thin_color =thin_color

self.fat_color =fat_color

self.objs =self.compute_pov_objs(**config)

defcompute_pov_objs(self, **config):

objects_pool =[]

forrhombi, color inself.tile():

p1, p2, p3, p4 =rhombi

polygon =Polygon(5, p1, p2, p3, p4, p1,

Texture(Pigment('color', color), config['default']))

objects_pool.append(polygon)

forp, q inzip(rhombi, [p2, p3, p4, p1]):

cylinder =Cylinder(p, q, config['edge_thickness'], config['edge_texture'])

objects_pool.append(cylinder)

forpoint inrhombi:

x, y =point

sphere =Sphere((x, y, 0), config['vertex_size'], config['vertex_texture'])

objects_pool.append(sphere)

returnObject(Union(*objects_pool))

defrhombus(self, r, s, kr, ks):

if(s -r)**2%5==1:

color =self.thin_color

else:

color =self.fat_color

point =(Penrose.GRIDS[r] *(ks -self.shift[s])

-Penrose.GRIDS[s] *(kr -self.shift[r])) *1j/Penrose.GRIDS[s-r].imag

index =[np.ceil((point/grid).real +shift)

forgrid, shift inzip(Penrose.GRIDS, self.shift)]

vertices =[]

forindex[r], index[s] in[(kr, ks), (kr+1, ks), (kr+1, ks+1), (kr, ks+1)]:

vertices.append(np.dot(index, Penrose.GRIDS))

vertices_real =[(z.real, z.imag) forz invertices]

returnvertices_real, color

deftile(self):

forr, s incombinations(range(5), 2):

forkr, ks inproduct(range(-self.num_lines, self.num_lines+1), repeat=2):

yieldself.rhombus(r, s, kr, ks)

defput_objs(self, *args):

returnObject(self.objs, *args)

1.

免责声明:本文系网络转载,版权归原作者所有。如涉及作品版权问题,请与我们联系,我们将根据您提供的版权证明材料确认版权并支付稿酬或者删除内容。返回搜狐,查看更多

责任编辑:

python画-如何用Python画各种著名数学图案 | 附图+代码相关推荐

  1. 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码

    原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...

  2. 用python画猫咪怎么画-如何用Python画一只机器猫?

    原标题:如何用Python画一只机器猫? 本文经授权转自公众号异步图书 如若转载请联系原公众号 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自信心的最好办法. 第一次 ...

  3. python udp_如何用python方法检测UDP端口

    如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用.网上搜索了一圈后,我得到的个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务. 那么如何 ...

  4. python数据分析——如何用python连接远程数据库

    本文将以SQLite.MySQL,PostgreSQL为例讲解python怎样连接远程数据库并执行相关数据库操作. SQLite SQLite可能是与Python连接的最方便的数据库,因为我们不需要安 ...

  5. 【Python】如何用Python发送SMTP邮件

    [背景] 自动发送邮件通知是流成自动化系统必备的功能,今天介绍如何用Python实现. [代码] 这里以163邮箱为例 def send_smtp_mail(host="smtp.163.c ...

  6. python语言是 创造的_慢步python,如何用python语言创造出一个真正的独立exe程序?...

    我们学习编程,终极目标还是编写一个独立的应用程序.独立的应用程序应该像QQ,微信一样不依靠其他程序运行,只有平台支持,就可以运行.从这个意义上说,所用应用程序都是基于操作系统运行的. 那么如何用pyt ...

  7. python workflow_如何用 Python 写 Alfred Workflow

    原标题:如何用 Python 写 Alfred Workflow 用 Mac 的同学应该都听过 Alfred,号称效率神器.但是,你有没有想过可以用 Python 自己写一个 Workflow 呢? ...

  8. 人生苦短我用python壁纸_人生苦短,我用 Python——我如何用 Python 助力工作和生活?...

    在生活和工作中,往往充斥着一些枯燥且乏味的事情.所以要让自己从机械地重复性劳动中解放出来,才是解放身心的正确姿势. 本文列举了我自己平时在工作和生活中的七个小场景,每个场景都是带有这样「重复性」性质的 ...

  9. 【Python】如何用 python 计算矩阵相乘 - numpy.dot()

    文章目录 一.如何用 python 计算矩阵乘法? 二.实例 参考链接 一.如何用 python 计算矩阵乘法? 使用 Numpy 包里的 dot() 函数. 该函数主要功能有两个:向量点积 和 矩阵 ...

最新文章

  1. vs2010快捷方式
  2. 【CSS3】好玩的动画线框
  3. java虚拟机及加载class文件的原理机制
  4. php留言板实战,PHP留言本,非常适合新手实战操作!
  5. 关于 Group 的另一个函数
  6. centos7下编译openjdk11
  7. 随想录(关于signal的实验)
  8. Shell编程入门学习
  9. 征途mysql安装配置_征途服务端的配置和安装
  10. mysql结构改写为hbase表_sqlite数据库修改表结构
  11. 台湾ICPlus IP175GHI, 85nm /极低功率,5接口10/100以太网集成交换机芯片
  12. HFSS 微带线验证和仿真
  13. 什么是节点流和处理流?
  14. 服务器定时执行js脚本
  15. js 正则校验——以J开头,以A结尾
  16. C语言三个整蛊程序,很强!!
  17. Git基于已有分支创建分支
  18. permute()--对维度进行换位
  19. SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器
  20. photoshop CC2017好玩的脸部智能识别液化

热门文章

  1. linux c不占用cpu的延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
  2. (传送门)ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A
  3. pycharm flask 设置端口号和开启debug
  4. composer 修改为 国内镜像
  5. angular1x初始与架构演进(四)gulp配置+OcLazyLoad中资源MD5时间轴更新
  6. Bash: Removing leading zeroes from a variable
  7. [Notes] Bash Shell特性
  8. jeecms v9 vue环境搭建
  9. H5与Native交互之JSBridge技术
  10. 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)