python画-如何用Python画各种著名数学图案 | 附图+代码
原标题:如何用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画各种著名数学图案 | 附图+代码相关推荐
- 用python画简单的图案-如何用Python画各种著名数学图案 | 附图+代码
原标题:如何用Python画各种著名数学图案 | 附图+代码 用Python绘制著名的数学图片或动画,展示数学中的算法魅力. Mandelbrot 集 代码:46 lines (34 sloc) 1. ...
- 用python画猫咪怎么画-如何用Python画一只机器猫?
原标题:如何用Python画一只机器猫? 本文经授权转自公众号异步图书 如若转载请联系原公众号 自信心是成功的源泉,对刚入门编程行业的初级程序员来说,多敲代码多做项目就是构建自信心的最好办法. 第一次 ...
- python udp_如何用python方法检测UDP端口
如何用python方法检测UDP端口,首先要了解什么是UDP端口及作用.网上搜索了一圈后,我得到的个人理解是:UDP端口是含有网络服务必须的源端口和目的端口信息,用以建立和实现网络传输服务. 那么如何 ...
- python数据分析——如何用python连接远程数据库
本文将以SQLite.MySQL,PostgreSQL为例讲解python怎样连接远程数据库并执行相关数据库操作. SQLite SQLite可能是与Python连接的最方便的数据库,因为我们不需要安 ...
- 【Python】如何用Python发送SMTP邮件
[背景] 自动发送邮件通知是流成自动化系统必备的功能,今天介绍如何用Python实现. [代码] 这里以163邮箱为例 def send_smtp_mail(host="smtp.163.c ...
- python语言是 创造的_慢步python,如何用python语言创造出一个真正的独立exe程序?...
我们学习编程,终极目标还是编写一个独立的应用程序.独立的应用程序应该像QQ,微信一样不依靠其他程序运行,只有平台支持,就可以运行.从这个意义上说,所用应用程序都是基于操作系统运行的. 那么如何用pyt ...
- python workflow_如何用 Python 写 Alfred Workflow
原标题:如何用 Python 写 Alfred Workflow 用 Mac 的同学应该都听过 Alfred,号称效率神器.但是,你有没有想过可以用 Python 自己写一个 Workflow 呢? ...
- 人生苦短我用python壁纸_人生苦短,我用 Python——我如何用 Python 助力工作和生活?...
在生活和工作中,往往充斥着一些枯燥且乏味的事情.所以要让自己从机械地重复性劳动中解放出来,才是解放身心的正确姿势. 本文列举了我自己平时在工作和生活中的七个小场景,每个场景都是带有这样「重复性」性质的 ...
- 【Python】如何用 python 计算矩阵相乘 - numpy.dot()
文章目录 一.如何用 python 计算矩阵乘法? 二.实例 参考链接 一.如何用 python 计算矩阵乘法? 使用 Numpy 包里的 dot() 函数. 该函数主要功能有两个:向量点积 和 矩阵 ...
最新文章
- vs2010快捷方式
- 【CSS3】好玩的动画线框
- java虚拟机及加载class文件的原理机制
- php留言板实战,PHP留言本,非常适合新手实战操作!
- 关于 Group 的另一个函数
- centos7下编译openjdk11
- 随想录(关于signal的实验)
- Shell编程入门学习
- 征途mysql安装配置_征途服务端的配置和安装
- mysql结构改写为hbase表_sqlite数据库修改表结构
- 台湾ICPlus IP175GHI, 85nm /极低功率,5接口10/100以太网集成交换机芯片
- HFSS 微带线验证和仿真
- 什么是节点流和处理流?
- 服务器定时执行js脚本
- js 正则校验——以J开头,以A结尾
- C语言三个整蛊程序,很强!!
- Git基于已有分支创建分支
- permute()--对维度进行换位
- SpringMVC全局乱码过滤器、注解@RequestParam、自定义类型转换器
- photoshop CC2017好玩的脸部智能识别液化
热门文章
- linux c不占用cpu的延时,linux下写个C语言程序,要求有0.5微秒以下的延时,要怎样写...
- (传送门)ubuntu 安装截图工具 Shutter,并设置快捷键 Ctrl+Alt+A
- pycharm flask 设置端口号和开启debug
- composer 修改为 国内镜像
- angular1x初始与架构演进(四)gulp配置+OcLazyLoad中资源MD5时间轴更新
- Bash: Removing leading zeroes from a variable
- [Notes] Bash Shell特性
- jeecms v9 vue环境搭建
- H5与Native交互之JSBridge技术
- 洛谷.4252.[NOI2006]聪明的导游(提答 直径 随机化)