ITS·黑客方法论python趣味100例

【python】实验:分形图初试

2017-05-13  本文已影响115人  MJXH

写在前面,这个实验非常失败。

实验有关文档:
display | pygame 中文文档
http://bbs.fishc.com/thread-62164-1-1.html
使用Python绘制分形:Koch曲线、Julia集、Mandelbrot集
https://www.chenshaowen.com/blog/the-drawing-2d-fractal-graph-using-python/

初用sublme编译,遇到的小白问题:
问题:can't find '__main__'module in ''
解决:就是复制粘贴的代码没保存,保存一下取个名字就好了

问题:[Decode error - output not utf-8]
解决:http://blog.csdn.net/bbdxf/article/details/25594703

问题:怎样cmd中切换不同版本的python?
现在sublime支持运行3.5.2 PyScripter运行3.4.4
未解决:操作有点复杂,现在用不上

关于分形图实验:
1.首先要安装一些包,根据不同的需求有各种包,实验中用的是: turtle 和 pygame 当然还有很多其他的。
2.分形图其实是一种递归,涉及到根据图形进行数学公式的归纳,这一步暂时还有没能力解决。。。但是这是核心,所以这次的实验是失败的。。
3.下面开始贴代码和运行图


Kochsnowflake.png
import turtle as t    

def koch(level=4, size=200):
    if level == 0:
        t.forward(size)
        return
    else:
        for angle in [60, -120, 60, 0]:
           koch(level-1, size/3)
           t.left(angle)

t.hideturtle()
t.up()
t.setx(-t.window_width()/2)
t.down()
t.speed(0)

koch(4,t.window_width())
t.exitonclick()
FractalTree.png
import turtle as t
 
def dragon(level=4, size=200, zig=t.right, zag=t.left):
    if level <= 0:
        t.forward(size)
        return
 
    size /= 1.41421
    zig(45)
    dragon(level-1, size, t.right, t.left)
    zag(90)
    dragon(level-1, size, t.left, t.right)
    zig(45)
 
t.speed(0)
t.hideturtle()
dragon(8)
t.exitonclick()
DragonCurve.png
import pygame, math
 
pygame.init()
window = pygame.display.set_mode((600, 600))
pygame.display.set_caption("Fractal Tree")
screen = pygame.display.get_surface()
 
def drawTree(x1, y1, angle, depth):
    if depth:
        x2 = x1 + int(math.cos(math.radians(angle)) * depth * 10.0)
        y2 = y1 + int(math.sin(math.radians(angle)) * depth * 10.0)
        pygame.draw.line(screen, (255,255,255), (x1, y1), (x2, y2), 2)
        drawTree(x2, y2, angle - 20, depth - 1)
        drawTree(x2, y2, angle + 20, depth - 1)
 
def input(event):
    if event.type == pygame.QUIT:
        exit(0)
 
drawTree(300, 550, -90, 9)
pygame.display.flip()
while True:
    input(pygame.event.wait())
知乎玫瑰花.png
from mpl_toolkits.mplot3d import Axes3D
from matplotlib import cm
from matplotlib.ticker import LinearLocator
import matplotlib.pyplot as plt
import numpy as np

fig = plt.figure()
ax = fig.gca(projection='3d')
[x, t] = np.meshgrid(np.array(range(25))/24.0,np.arange(0, 575.5, 0.5)/575*17*np.pi-2*np.pi)
p = (np.pi/2)*np.exp(-t/(8*np.pi))
u = 1-(1-np.mod(3.6*t, 2*np.pi)/np.pi)**4/2
y = 2*(x**2-x)**2*np.sin(p)
r = u*(x*np.sin(p)+y*np.cos(p))
surf = ax.plot_surface(r*np.cos(t), r*np.sin(t),u*(x*np.cos(p)-y*np.sin(p)), rstride=1,cstride=1, cmap=cm.gist_rainbow_r,linewidth=0, antialiased=True)
plt.show()

这个实验非常失败。我不仅没能自己也做一幅分形图出来,而且连人家写的图都没看懂,反而觉得这个非常有趣,跑的网上找各种代码来运行。玩物丧志的结果是......最后找到了一个贪吃蛇的代码,玩了一晚上 的贪吃蛇。。。。

上一篇下一篇

猜你喜欢

热点阅读