科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件 Python 小试(一)

Python 小试(一)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这是上半年对分形有兴趣的写的,用到了pygame作为显示接口, 你把pygame的接口函数集看看就很清楚了,然后就是充分利用 了python的数据类型的优势,对对象很陌生的朋友也很容易搞清

作者:ColoR_Pig 来源:CSDN 2008年5月26日

关键字: 小试 python 软件

  • 评论
  • 分享微博
  • 分享邮件
 

这是上半年对分形有兴趣的写的,用到了pygame作为显示接口,
你把pygame的接口函数集看看就很清楚了,然后就是充分利用
了python的数据类型的优势,对对象很陌生的朋友也很容易搞清
下面的程序,有兴趣的朋友可以看看。


#filename fractal.py
import pygame
from pygame.locals import *

fg=220,220,220
bg=0,0,0

#如何指定向量:
#将图形右转90度,使level=1的唯一的线段和线段(0,0)^(1,0)重合,
#然后取父线起点、终点,母线起点,起点指向终点的向量

#∧形填充线父体
f_a=[(.5j,1),
     (-.5j,1)]
f_b=[(0,.5),
     (.5+.5j,.5-.5j)]
#填充线母体
m_a=[(.5+.25j,.5),
     (.5-.25j,.5),
     (.25-.5j,.5j),
     (.25+.5j,-.5j)]
#龙曲线
m_b=[(.5-.5j,.5+.5j),
     (.5-.5j,-.5+.5j)]
#Koch
m_c=[(0,.333),
     (.333,.167-.289j),
     (.5-.289j,.167+.289j),
     (.667,.333)]
#Sierpinski变种
m_d=[(.25-.433j,-.25+.433j),
     (.25-.433j,.5),(1,-.25-.433j)]
#四种树
m_e=[(1,.4-.4j),
     (1,.4+.4j)]
m_f=[(.5,.5),
     (.3,.38+.25j),
     (.3,.38-.25j)]
m_g=[(0,.4),(.4,.3),
     (.7,.3),(.4,.25-.17j),
     (.7,.25+.17j)]
m_h=[(0,.5),
     (.5,.5),
     (1,.21-.2j),
     (1.21-.2j,.41-.12j),
     (1.62-.32j,.38+.06j),
     (1,.37+.2j),
     (1.37+.2j,.36),
     (1.73+.2j,.27-.16j)]

p_a=(80+230j,200+0j)
p_b=(50+300j,300+0j)
p_c=(200+330j,-110j)

NAME=['Filling line 1',
      'Dragon curve',
      'Koch',
      'Sierpinski-like',
      'Filling line 2',
      'Tree 1',
      'Tree 2',
      'Tree 3',
      'Tree 4']

FATHER=[f_a,0,0,0,f_b,0,0,0,0]               #父体表
MOTHER=[m_a,m_b,m_c,m_d,m_a,m_e,m_f,m_g,m_h] #母体表
LIMIT=[5,11,5,8,6,8,6,4,4]                   #最大跌代次数
HOLDON=[0,0,0,0,0,1,1,1,1]                   #是否保留上一级图形
PLACE=[0,p_a,p_b,p_b,0,p_c,0,0,p_c]          #输出与屏幕的向量差


def fractal(base,vector,level):
    if level:
        for B,V in mother:
            b=B*vector+base
            v=V*vector
            fractal(b,v,level-1)
    elif not father:
        pygame.draw.line(screen,fg,(base.real,
                                    base.imag),
                                   (base.real+vector.real,
                                    base.imag+vector.imag))
    else:
        for S,E in father:
            s=S*vector+base
            e=E*vector+base
            pygame.draw.line(screen,fg,(s.real,s.imag),
                                       (e.real,e.imag))

pygame.init()
pygame.display.set_caption('分形图形 0.2α  sunyueming')
screen=pygame.display.set_mode((400,400))
screen.fill(bg)
font=pygame.font.Font(None, 16)

fn=0
lv=0
FN=1
LV=1

done=0
while not done:
    for e in pygame.event.get():
        if e.type == QUIT or (e.type == KEYUP and e.key == K_ESCAPE):
            done=1
        if e.type == KEYUP and e.key == K_DOWN:
            if fn<>len(MOTHER)-1:
                fn=fn+1
            else:
                fn=0
            lv=0
            screen.fill(bg)
        if e.type == KEYUP and e.key == K_SPACE:
            if lv<LIMIT[fn]:
                lv=lv+1
                if not HOLDON[fn]:
                    screen.fill(bg)
        if FN<>fn or LV<>lv:
            mother=MOTHER[fn]
            father=FATHER[fn]
            if not PLACE[fn]:
                PB,PV=200+320j,-240j
            else:
                PB,PV=PLACE[fn]
            text='Practal - '+NAME[fn]+'  Level='+str(lv+1)+' '
            ren=font.render(text, 0, fg, bg)              
            screen.blit(ren, (10, 10))
            FN=fn
            LV=lv
            fractal(PB,PV,lv)
        pygame.display.update()

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章