猫史档案馆


【Python作品分享】m【作品秀】

用户:秤杆不平衡秤杆不平衡查看:0 回复:4 评论:0 创建时间:2022-07-31T21:58:35


【作品展示】

center_image

 

【作品介绍】

自己看——上帝的指纹吧!

 

【作品源代码】

import pygame
import sys
import math
import time
from pygame.locals import*
screen_length = 900
centrex = -0.45
centrey = 0
zx = 0
zy = 0
TULV_TO_ASP = 3/screen_length
cnt = 20
cnt_print = 1
pygame.init()
screen = pygame.display.set_mode((screen_length, screen_length))
pygame.display.set_caption("曼得勃罗集")
rect_l = 5

dict_for_ASP = {pygame.K_t: 1,
                pygame.K_0: 2,
                pygame.K_1: 3,
                pygame.K_2: 4,
                pygame.K_3: 5,
                pygame.K_4: 6,
                pygame.K_5: 9,
                pygame.K_6: 10,
                pygame.K_7: 12,
                pygame.K_8: 15,
                pygame.K_9: 20,
                pygame.K_b: 30,
                pygame.K_m: 60, }


def showinfo():
    print("上下左右键移动,")
    print("w大s小q还原。")
    print("a增精度s相反,")
    print("空格显参h说明。")
    print("t,0~9,b,m调分辨!")


def z(zx, zy, cx, cy, cnt):
    a = (zx, zy)
    b = (zx, zy)
    for i in range(cnt):
        b = (a[0]**2-a[1]**2+cx, 2*a[0]*a[1]+cy)
        if math.sqrt(abs(b[0])**2+abs(b[1])**2) >= 2:
            return "big"
        a = b
    return b


#print(z(zx, zy, -1.8, -0.3, cnt))


def draw():
    global screen_length, centrex, centrey, zx, zy, TULV_TO_ASP, cnt, screen, rect_l
    screen.fi喵))
    range_cnt = int(screen_length/rect_l+1)
    t1 = time.time()
    cnt_for = 0
    for x in range(range_cnt):
        for y in range(range_cnt):
            cx = centrex+TULV_TO_ASP*(rect_l*x+(rect_l/2)-screen_length/2)
            cy = centrey+TULV_TO_ASP*(rect_l*y+(rect_l/2)-screen_length/2)
            return_z = z(zx, zy, cx, cy, cnt)
            if return_z != "big":
                pygame.draw.rect(screen, (0, 0, 0),
                                 (x*rect_l, y*rect_l, rect_l, rect_l))
            cnt_for += 1
            t2 = time.time()
            if t2-t1 >= 1:
                print(str(((cnt_for)/(range_cnt**2))*100), "%")
                t1 = time.time()
    # 中心点设置
    #pygame.draw.rect(screen, (255, 0, 0),(int(screen_length/2), int(screen_length/2),10,10),)
    pygame.display.update()


showinfo()
draw()
while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        if event.type == pygame.KEYUP:
            # 上下左右移动
            if event.key == pygame.K_UP:
                centrey -= 50*TULV_TO_ASP
                draw()
            if event.key == pygame.K_LEFT:
                centrex -= 50*TULV_TO_ASP
                draw()
            if event.key == pygame.K_DOWN:
                centrey += 50*TULV_TO_ASP
                draw()
            if event.key == pygame.K_RIGHT:
                centrex += 50*TULV_TO_ASP
                draw()
            # w大a小,a多d少
            if event.key == pygame.K_w:
                TULV_TO_ASP = TULV_TO_ASP/1.1
                draw()
            if event.key == pygame.K_a:
                cnt = int(cnt*1.1)
                draw()
            if event.key == pygame.K_s:
                TULV_TO_ASP = TULV_TO_ASP*1.1
                draw()
            if event.key == pygame.K_d and cnt/1.1 >= 10:
                cnt = int(cnt/1.1)
                draw()
            if event.key == pygame.K_q:
                TULV_TO_ASP = 3/screen_length
                centrex = -0.45
                centrey = 0
                draw()
            # 空格键显示参数
            if event.key == pygame.K_SPACE:
                print(cnt_print)
                print()
                print("------------------")
                print("| TULV_TO_ASP")
                print("| cnt")
                print("| centrex", "centrey")
                print("| rect_l")
                print("------------------")
                print("|", TULV_TO_ASP)
                print("|", cnt)
                print("|", centrex, centrey)
                print("|", rect_l)
                print("------------------")
                cnt_print += 1
            # m,b,0~9,t键分别是从小到大设置分辨率
            # 可以模糊查找要看的地方,再用t或0键看的更清楚
            if event.key==pygame.K_h:
                showinfo()
            for i in dict_for_ASP:
                if event.key == i:
                    rect_l = dict_for_ASP[i]
                    draw()

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 1下一页
小小小嘟嘟小小小嘟嘟

哦吼

 

点赞1


评论


小小小嘟嘟小小小嘟嘟

看我的喵o.cn/community/475077

点赞1


评论


小小小嘟嘟小小小嘟嘟

这不就是我以前想做的芒德布罗集吗

 

点赞1


评论


小小小嘟嘟小小小嘟嘟

我建议你学一下numpy库,这里面定义了一个数据类型很喵,就是ndarray,相当于多层嵌套的列表,但用它来运算速度比列表快个几十倍(甚至100倍)。里面还有一些方法很方便编程。

点赞1


评论