<pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
    <pre id="vvttv"></pre>

      <p id="vvttv"></p>

          <p id="vvttv"></p>

                <p id="vvttv"></p>

                <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                  <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                    <p id="vvttv"></p>

                    繪制L-System的分形圖?

                    相關文檔: L-System分形

                    _images/fractal_lsystem03.png
                    # -*- coding: utf-8 -*-
                    #L-System(Lindenmayer system)是一種用字符串替代產生分形圖形的算法
                    from math import sin, cos, pi
                    import matplotlib.pyplot as pl
                    from matplotlib import collections
                    
                    class L_System(object):
                        def __init__(self, rule):
                            info = rule['S']
                            for i in range(rule['iter']):
                                ninfo = []
                                for c in info:
                                    if c in rule:
                                        ninfo.append(rule[c])
                                    else:
                                        ninfo.append(c)
                                info = "".join(ninfo)
                            self.rule = rule
                            self.info = info
                    
                        def get_lines(self):
                            d = self.rule['direct']
                            a = self.rule['angle']
                            p = (0.0, 0.0)
                            l = 1.0
                            lines = []
                            stack = []
                            for c in self.info:
                                if c in "Ff":
                                    r = d * pi / 180
                                    t = p[0] + l*cos(r), p[1] + l*sin(r)
                                    lines.append(((p[0], p[1]), (t[0], t[1])))
                                    p = t
                                elif c == "+":
                                    d += a
                                elif c == "-":
                                    d -= a
                                elif c == "[":
                                    stack.append((p,d))
                                elif c == "]":
                                    p, d = stack[-1]
                                    del stack[-1]
                            return lines
                    
                    rules = [
                        {
                            "F":"F+F--F+F", "S":"F",
                            "direct":180,
                            "angle":60,
                            "iter":5,
                            "title":"Koch"
                        },
                        {
                            "X":"X+YF+", "Y":"-FX-Y", "S":"FX",
                            "direct":0,
                            "angle":90,
                            "iter":13,
                            "title":"Dragon"
                        },
                        {
                            "f":"F-f-F", "F":"f+F+f", "S":"f",
                            "direct":0,
                            "angle":60,
                            "iter":7,
                            "title":"Triangle"
                        },
                        {
                            "X":"F-[[X]+X]+F[+FX]-X", "F":"FF", "S":"X",
                            "direct":-45,
                            "angle":25,
                            "iter":6,
                            "title":"Plant"
                        },
                        {
                            "S":"X", "X":"-YF+XFX+FY-", "Y":"+XF-YFY-FX+",
                            "direct":0,
                            "angle":90,
                            "iter":6,
                            "title":"Hilbert"
                        },
                        {
                            "S":"L--F--L--F", "L":"+R-F-R+", "R":"-L+F+L-",
                            "direct":0,
                            "angle":45,
                            "iter":10,
                            "title":"Sierpinski"
                        },
                        
                    ]
                    
                    def draw(ax, rule, iter=None):
                        if iter!=None:
                            rule["iter"] = iter
                        lines = L_System(rule).get_lines()
                        linecollections = collections.LineCollection(lines)
                        ax.add_collection(linecollections, autolim=True)
                        ax.axis("equal")
                        ax.set_axis_off()
                        ax.set_xlim(ax.dataLim.xmin, ax.dataLim.xmax)
                        ax.invert_yaxis()
                        
                    fig = pl.figure(figsize=(7,4.5))
                    fig.patch.set_facecolor("w")
                    
                    for i in xrange(6):
                        ax = fig.add_subplot(231+i)
                        draw(ax, rules[i])
                    
                    fig.subplots_adjust(left=0,right=1,bottom=0,top=1,wspace=0,hspace=0)
                    pl.show()
                    

                    上一篇文章

                    迭代函數系統的分形

                      <pre id="vvttv"><mark id="vvttv"><progress id="vvttv"></progress></mark></pre>
                      <pre id="vvttv"></pre>

                        <p id="vvttv"></p>

                            <p id="vvttv"></p>

                                  <p id="vvttv"></p>

                                  <pre id="vvttv"><cite id="vvttv"><progress id="vvttv"></progress></cite></pre>

                                    <output id="vvttv"><dfn id="vvttv"><th id="vvttv"></th></dfn></output>

                                      <p id="vvttv"></p>

                                      这里只有精品视频