用户工具

站点工具


micropython:开发板:rpipico:demo:计算mandelbrot

将micropython源码中的examples/mandel.py例子修改了一下,用于测试计算性能

from time import ticks_ms, ticks_diff
 
def run(func, param = None):
    t1 = ticks_ms()
    if param == None:
        func()
    else:
        func(param)
    t2 = ticks_ms()
    print('calc time:', ticks_diff(t2, t1), 'ms')
 
def mandelbrot():
    # returns True if c, complex, is in the Mandelbrot set
    #@micropython.native
    def in_set(c):
        z = 0
        for i in range(40):
            z = z * z + c
            if abs(z) > 4:
                return False
        return True
 
    for v in range(31):
        for u in range(81):
            if in_set((u / 30 - 2) + (v / 15 - 1) * 1j):
                print(' ', end='')
            else:
                print('#', end='')
        print()
 
run(mandelbrot)

运行效果

############################################################ ####################
#################################################################################
########################################################  #######################
#####################################################       #####################
######################################################      #####################
################################################### ###    ### # ################
############################################   ##                ################
############################################                           ##########
###########################################                          ############
##########################################                             ##########
########################################                                 ########
########################## ### ########                                 #########
##########################          ###                                 #########
########################             #                                   ########
#######################                                                ##########
                                                                    #############
#######################                                                ##########
########################             #                                   ########
##########################          ###                                 #########
########################## ### ########                                 #########
########################################                                 ########
##########################################                             ##########
###########################################                          ############
############################################                           ##########
############################################   ##                ################
################################################### ###    ### # ################
######################################################      #####################
#####################################################       #####################
########################################################  #######################
#################################################################################
############################################################ ####################

V2版使用不同字符代表不同颜色(发散速度),效果更好一些。

from time import ticks_ms, ticks_diff
 
MAX_ITER = 60
MANDEL_CHAR = (
    ' ', '.', '`', ',', ':', ';', '|', 'o', '<', '>',
    '(', ')', '{', '}', '+', '~', '=', '-', '#', '@'
)
 
def run(func, param = None):
    t1 = ticks_ms()
    if param == None:
        func()
    else:
        func(param)
    t2 = ticks_ms()
    print('calc time:', ticks_diff(t2, t1), 'ms')
 
 
# @micropython.native
def calc_mandel(c):
    z = 0
    for i in range(MAX_ITER):
        z = z * z + c
        if abs(z) > 4:
            return i
    return MAX_ITER - 1
 
def mandelbrot():
    N = len(MANDEL_CHAR)
    print('')
    for v in range(31):
        for u in range(81):
            n = calc_mandel((u / 30 - 2) + (v / 15 - 1) * 1j)
            print(MANDEL_CHAR[(MAX_ITER - n - 1)%N], end='')
        print()
 
run(mandelbrot)

运行效果

-------------------------==================~~~~~~~++}}{>.(|< ++~~~~==========----
----------------------==================~~~~~~~~+++}}{)(o-<){}++~~~~~~=========--
-------------------==================~~~~~~~~++++}}{>oo:  ,>>(}+++~~~~~~========-
----------------=================~~~~~~~~++++++}}}{)<       .>{}}++++~~~~~=======
-------------================~~~~~~~~~~+++}}}{{{{))(o~      :(){{}}}+++++~~~=====
----------===============~~~~~~~~~~~++++})-@><((o>o :`=    .:|;< >){{{)`}+~~~====
-------==============~~~~~~~~~~~~+++++}}{)o.  ~,+                ,<<@:; :}+~~~===
-----=============~~~~~~~~~+++++++++}}}{)(>:                          `<{}+~~~~==
--=============~~~~~+++++++++++}}}}}}{)#:@`                          #o({}++~~~==
-===========~~~~~~++}{<({{}{{){{{{{{{)(<:;                             o>>)++~~==
==========~~~~~~~+++}{>o<<>(>`o((())((<=                                 #)++~~~=
========~~~~~~~+++}}}{)>|>  ;- ==~.<<<:-                                |(}++~~~=
=====~~~~~~~++++}}{{{(<| ;          ::{                                 <:}++~~~=
==~~~~~++++++}}}{)|>><;-             -                                  ~{}+~~~~=
~~~+++})}}}}{{{))>o=);-                                                >{}++~~~~=
                                                                    -o()}}++~~~~=
~~~+++})}}}}{{{))>o=);-                                                >{}++~~~~=
==~~~~~++++++}}}{)|>><;-             -                                  ~{}+~~~~=
=====~~~~~~~++++}}{{{(<| ;          ::{                                 <:}++~~~=
========~~~~~~~+++}}}{)>|>  ;- ==~.<<<:-                                |(}++~~~=
==========~~~~~~~+++}{>o<<>(>`o((())((<=                                 #)++~~~=
-===========~~~~~~++}{<({{}{{){{{{{{{)(<:;                             o>>)++~~==
--=============~~~~~+++++++++++}}}}}}{)#:@`                          #o({}++~~~==
-----=============~~~~~~~~~+++++++++}}}{)(>:                          `<{}+~~~~==
-------==============~~~~~~~~~~~~+++++}}{)o.  ~,+                ,<<@:; :}+~~~===
----------===============~~~~~~~~~~~++++})-@><((o>o :`=    .:|;< >){{{)`}+~~~====
-------------================~~~~~~~~~~+++}}}{{{{))(o~      :(){{}}}+++++~~~=====
----------------=================~~~~~~~~++++++}}}{)<       .>{}}++++~~~~~=======
-------------------==================~~~~~~~~++++}}{>oo:  ,>>(}+++~~~~~~========-
----------------------==================~~~~~~~~+++}}{)(o-<){}++~~~~~~=========--
-------------------------==================~~~~~~~++}}{>.(|< ++~~~~==========----


purge    随机主题   
micropython/开发板/rpipico/demo/计算mandelbrot.txt · 最后更改: 2021/02/28 23:13 (外部编辑) · 查看次数: 10090