Ejemplo n.º 1
0
 def pcb(self, ax):
     print('plot callback!',
           len([r for r in self.lsykws['rules'] if not r is None]))
     #self.lsykws['iterations'] -= 1
     self.lsykws['polar'] = gtl.rad(self.lsykws['polar'])
     self.lsykws['azimuthal'] = gtl.rad(self.lsykws['azimuthal'])
     self.lsys = lsy.lsystem(**self.lsykws)
     self.lsys._realize(vec3(0, 0, 0), vec3(0, 0, 1), ax)
     self.lsykws['polar'] = gtl.deg(self.lsykws['polar'])
     self.lsykws['azimuthal'] = gtl.deg(self.lsykws['azimuthal'])
     return ax
Ejemplo n.º 2
0
class axialmtn(unittest.TestCase):

    keepers = {
        'lake':
        ((vec3(0, 0, 0), vec3(0, 1, 0), 'X',
          dict([('X', '{[[X}{]X}F]X'), ('F', 'FA'),
                ('A', 'F')]), 6), dict(dazimuthal=gtl.rad(25.7), drho=20)),
    }

    def pg(self, *ags, **kws):
        pg = dpg.planargraph()
        for piece in lsy.lgen(*ags, **kws):
            if isinstance(piece, tuple):
                p1, p2 = piece
                v1, v2 = pg.fp(p1, 10), pg.fp(p2, 10)
                e12 = pg.fe(v1, v2)
            elif isinstance(piece, vec3):
                pass
        py = pym.pgtopy(pg, 1)[0]
        py = pym.bisectb(py)
        py = pym.smoothxy(py, 0.5, 2)

        #ax = pg.plotxy(l = 20)
        ax = dtl.plot_axes_xy(50)
        ax = dtl.plot_polygon_xy(py, ax, lw=3)
        plt.show()

    def test_lake(self):
        lakeags, params = self.keepers['lake']
        self.pg(*lakeags, **params)

    def aaatest(self):
        #i = 5
        i = 6
        p, d = vec3(0, 0, 0), vec3(0, 1, 0)
        axiom = 'X'
        rules = dict([('X', '{[[X}{]X}F]X'), ('F', 'FA'), ('A', 'F')])
        #rules = dict([('X','F{[X}{]X}FX'),('F','FF')])
        #axiom = 'F'
        #rules = dict([('F','F{[F}F{]F}F')])
        params = dict(dazimuthal=gtl.rad(25.7), drho=20)

        pg = dpg.planargraph()
        for piece in lsy.lgen(p, d, axiom, rules, i, **params):
            if isinstance(piece, tuple):
                p1, p2 = piece
                v1, v2 = pg.fp(p1, 10), pg.fp(p2, 10)
                e12 = pg.fe(v1, v2)
            elif isinstance(piece, vec3):
                pass

        py = pym.pgtopy(pg, 1)[0]
        py = pym.bisectb(py)
        py = pym.smoothxy(py, 0.5, 2)
        #py = pym.aggregate(py,2)

        #ax = pg.plotxy(l = 20)
        ax = dtl.plot_axes_xy(20)
        ax = dtl.plot_polygon_xy(py, ax, lw=3)
        plt.show()
Ejemplo n.º 3
0
 def test_axialtree(self):
     i = 5
     p, d = vec3(0, 0, 0), vec3(0, 1, 0)
     axiom = 'X'
     rules = dict([('X', 'F{[X}{]X}FX'), ('F', 'FF')])
     params = dict(dazimuthal=gtl.rad(25.7))
     realize(i, p, d, axiom, rules, **params)
Ejemplo n.º 4
0
 def test_dragoncurve(self):
     i = 9
     p, d = vec3(0, 0, 0), vec3(0, 1, 0)
     axiom = 'FX'
     rules = dict([('X', 'X[YF['), ('Y', ']FX]Y')])
     params = dict(dazimuthal=gtl.rad(90))
     realize(i, p, d, axiom, rules, **params)
Ejemplo n.º 5
0
 def test_plant(self):
     i = 3
     p,d = vec3(0,0,0),vec3(0,1,0)
     axiom = 'X'
     rules = dict([('X','F]{{X}[X}[F{[FX}]X'),('F','FF')])
     params = dict(dazimuthal = gtl.rad(25))
     realize(i,p,d,axiom,rules,**params)
Ejemplo n.º 6
0
 def test_grass(self):
     i = 5
     p,d = vec3(0,0,0),vec3(0,1,0)
     axiom = 'F'
     rules = dict([('F','F{[F}F{]F}F')])
     params = dict(dazimuthal = gtl.rad(25.7))
     realize(i,p,d,axiom,rules,**params)
Ejemplo n.º 7
0
 def test_dragoncurve(self):
     i = 9
     p,d = vec3(0,0,0),vec3(0,1,0)
     axiom = 'FX'
     rules = dict([('X','X[YF['),('Y',']FX]Y')])
     params = dict(dazimuthal = gtl.rad(90))
     realize(i,p,d,axiom,rules,**params)
Ejemplo n.º 8
0
 def test_axialtree(self):
     i = 5
     p,d = vec3(0,0,0),vec3(0,1,0)
     axiom = 'X'
     rules = dict([('X','F{[X}{]X}FX'),('F','FF')])
     params = dict(dazimuthal = gtl.rad(25.7))
     realize(i,p,d,axiom,rules,**params)
Ejemplo n.º 9
0
 def test_plant(self):
     i = 3
     p, d = vec3(0, 0, 0), vec3(0, 1, 0)
     axiom = 'X'
     rules = dict([('X', 'F]{{X}[X}[F{[FX}]X'), ('F', 'FF')])
     params = dict(dazimuthal=gtl.rad(25))
     realize(i, p, d, axiom, rules, **params)
Ejemplo n.º 10
0
 def test_grass(self):
     i = 5
     p, d = vec3(0, 0, 0), vec3(0, 1, 0)
     axiom = 'F'
     rules = dict([('F', 'F{[F}F{]F}F')])
     params = dict(dazimuthal=gtl.rad(25.7))
     realize(i, p, d, axiom, rules, **params)
Ejemplo n.º 11
0
    def aaatest(self):
        #i = 5
        i = 6
        p, d = vec3(0, 0, 0), vec3(0, 1, 0)
        axiom = 'X'
        rules = dict([('X', '{[[X}{]X}F]X'), ('F', 'FA'), ('A', 'F')])
        #rules = dict([('X','F{[X}{]X}FX'),('F','FF')])
        #axiom = 'F'
        #rules = dict([('F','F{[F}F{]F}F')])
        params = dict(dazimuthal=gtl.rad(25.7), drho=20)

        pg = dpg.planargraph()
        for piece in lsy.lgen(p, d, axiom, rules, i, **params):
            if isinstance(piece, tuple):
                p1, p2 = piece
                v1, v2 = pg.fp(p1, 10), pg.fp(p2, 10)
                e12 = pg.fe(v1, v2)
            elif isinstance(piece, vec3):
                pass

        py = pym.pgtopy(pg, 1)[0]
        py = pym.bisectb(py)
        py = pym.smoothxy(py, 0.5, 2)
        #py = pym.aggregate(py,2)

        #ax = pg.plotxy(l = 20)
        ax = dtl.plot_axes_xy(20)
        ax = dtl.plot_polygon_xy(py, ax, lw=3)
        plt.show()
Ejemplo n.º 12
0
    def aaatest(self):
        #i = 5
        i = 6
        p,d = vec3(0,0,0),vec3(0,1,0)
        axiom = 'X'
        rules = dict([('X','{[[X}{]X}F]X'),('F','FA'),('A','F')])
        #rules = dict([('X','F{[X}{]X}FX'),('F','FF')])
        #axiom = 'F'
        #rules = dict([('F','F{[F}F{]F}F')])
        params = dict(dazimuthal = gtl.rad(25.7),drho = 20)
        
        pg = dpg.planargraph()
        for piece in lsy.lgen(p,d,axiom,rules,i,**params):
            if isinstance(piece,tuple):
                p1,p2 = piece
                v1,v2 = pg.fp(p1,10),pg.fp(p2,10)
                e12 = pg.fe(v1,v2)
            elif isinstance(piece,vec3):pass

        py = pym.pgtopy(pg,1)[0]
        py = pym.bisectb(py)
        py = pym.smoothxy(py,0.5,2)
        #py = pym.aggregate(py,2)

        #ax = pg.plotxy(l = 20)
        ax = dtl.plot_axes_xy(20)
        ax = dtl.plot_polygon_xy(py,ax,lw = 3)
        plt.show()
Ejemplo n.º 13
0
 def atest_grass(self):
     kws = {
         'axiom':'F',
         'rules':[('F','F[+F]F[-F]F')],
         'iterations':3,'seed':0,
         'angle':gtl.rad(25.7),
             }
     p,d = pstack.pop(0),dstack.pop(0)
     cx = ltr.tree(p,d,ax = ax)
     cx.display()
Ejemplo n.º 14
0
 def test_adist(self):
     deg10 = gtl.rad(10)
     self.assertEqual(
         gtl.isnear(gtl.adist(deg10 * 2, deg10 * 6), deg10 * 4), 1)
     self.assertEqual(
         gtl.isnear(gtl.adist(deg10 * 6, deg10 * 2), deg10 * 4), 1)
     self.assertEqual(
         gtl.isnear(gtl.adist(deg10 * 6, deg10 * 22), deg10 * 16), 1)
     self.assertEqual(
         gtl.isnear(gtl.adist(deg10 * 6, deg10 * 32), deg10 * 10), 1)
Ejemplo n.º 15
0
 def atest_grass(self):
     kws = {
         'axiom': 'F',
         'rules': [('F', 'F[+F]F[-F]F')],
         'iterations': 3,
         'seed': 0,
         'angle': gtl.rad(25.7),
     }
     p, d = pstack.pop(0), dstack.pop(0)
     cx = ltr.tree(p, d, ax=ax)
     cx.display()
Ejemplo n.º 16
0
    def mountains(topo, tip, e=2):
        '''topographical loop corresponding to the base of a mountain range'''
        p, d, i, axiom, rules = ((vec3(0, 0, 0), vec3(0, 1, 0), 6, 'X',
                                  dict([('X', '{[[X}{]X}F]X'), ('F', 'FA'),
                                        ('A', 'F')])))
        params = dict(dazimuthal=gtl.rad(25.7), drho=20)

        pg = pgr.planargraph()
        for piece in lsy.lgen(p, d, axiom, rules, i, **params):
            if isinstance(piece, tuple):
                p1, p2 = piece
                v1, v2 = pg.fp(p1, 10), pg.fp(p2, 10)
                e12 = pg.fe(v1, v2)
            elif isinstance(piece, vec3):
                pass
        py = pym.pgtopy(pg, 5)[0]
        py = pym.smoothxy(py, 0.5, 2, 0)
        py = pym.pinchb(py, 5)[0]

        pyprjx = vec3(1, 0, 0).prjps(py)
        pyprjy = vec3(0, 1, 0).prjps(py)
        tipprjx = vec3(1, 0, 0).prjps(tip.loop)
        tipprjy = vec3(0, 1, 0).prjps(tip.loop)
        recenter = vec3(
            ((pyprjx[1] + pyprjx[0]) - (tipprjx[1] + tipprjx[0])) / -2.0,
            ((pyprjy[1] + pyprjy[0]) - (tipprjy[1] + tipprjy[0])) / -2.0, 0)
        for p in py:
            p.trn(recenter)
        pyprjx = vec3(1, 0, 0).prjps(py)
        pyprjy = vec3(0, 1, 0).prjps(py)
        tipprjx = vec3(1, 0, 0).prjps(tip.loop)
        tipprjy = vec3(0, 1, 0).prjps(tip.loop)
        scale = 1.*(tipprjx[1]-tipprjx[0]+tipprjy[1]-tipprjy[0])/\
                    ( pyprjx[1]- pyprjx[0]+ pyprjy[1]- pyprjy[0])
        for p in py:
            p.scl(vec3(scale, scale, 0))

        #com = vec3(0,0,0).com(tip.loop).tov(vec3(0,0,0).com(py)).uscl(-1)
        py = pym.ebixy(tip.loop, py)[0]
        #py = pym.smoothxy(py,0.5,2)
        py = pym.pinchb(py, 5)[0]

        newtips = [topo.avert(tip, loop=py)]

        print('mountains')
        ax = dtl.plot_axes_xy(400)
        ax = dtl.plot_polygon_xy(tip.loop, ax, lw=3, col='b')
        ax = dtl.plot_polygon_xy(py, ax, lw=3, col='g')
        plt.show()

        return newtips
Ejemplo n.º 17
0
    def mountains(topo,tip,e = 2):
        '''topographical loop corresponding to the base of a mountain range'''
        p,d,i,axiom,rules = ((vec3(0,0,0),vec3(0,1,0),6,
            'X',dict([('X','{[[X}{]X}F]X'),('F','FA'),('A','F')])))
        params = dict(dazimuthal = gtl.rad(25.7),drho = 20)

        pg = pgr.planargraph()
        for piece in lsy.lgen(p,d,axiom,rules,i,**params):
            if isinstance(piece,tuple):
                p1,p2 = piece
                v1,v2 = pg.fp(p1,10),pg.fp(p2,10)
                e12 = pg.fe(v1,v2)
            elif isinstance(piece,vec3):pass
        py = pym.pgtopy(pg,5)[0]
        py = pym.smoothxy(py,0.5,2,0)
        py = pym.pinchb(py,5)[0]
  
        pyprjx = vec3(1,0,0).prjps(py)
        pyprjy = vec3(0,1,0).prjps(py)
        tipprjx = vec3(1,0,0).prjps(tip.loop)
        tipprjy = vec3(0,1,0).prjps(tip.loop)
        recenter = vec3(
            ((pyprjx[1]+pyprjx[0])-(tipprjx[1]+tipprjx[0]))/-2.0,
            ((pyprjy[1]+pyprjy[0])-(tipprjy[1]+tipprjy[0]))/-2.0,0)
        for p in py:p.trn(recenter)
        pyprjx = vec3(1,0,0).prjps(py)
        pyprjy = vec3(0,1,0).prjps(py)
        tipprjx = vec3(1,0,0).prjps(tip.loop)
        tipprjy = vec3(0,1,0).prjps(tip.loop)
        scale = 1.*(tipprjx[1]-tipprjx[0]+tipprjy[1]-tipprjy[0])/\
                    ( pyprjx[1]- pyprjx[0]+ pyprjy[1]- pyprjy[0])
        for p in py:p.scl(vec3(scale,scale,0))

        #com = vec3(0,0,0).com(tip.loop).tov(vec3(0,0,0).com(py)).uscl(-1)
        py = pym.ebixy(tip.loop,py)[0]
        #py = pym.smoothxy(py,0.5,2)
        py = pym.pinchb(py,5)[0]

        newtips = [topo.avert(tip,loop = py)]

        print('mountains')
        ax = dtl.plot_axes_xy(400)
        ax = dtl.plot_polygon_xy(tip.loop,ax,lw = 3,col = 'b')
        ax = dtl.plot_polygon_xy(py,ax,lw = 3,col = 'g')
        plt.show()

        return newtips
Ejemplo n.º 18
0
    def layroads(t, e):
        '''generate a planargraph of a network of roads'''

        #return pgr.planargraph()

        drho, i = 20, 3
        p, d = vec3(0, 0, 0), vec3(0, 1, 0)
        #axiom = 'X'
        #rules = dict([('X','F{[X}{]X}X'),('F','FF')])
        #params = dict(dazimuthal = gtl.rad(90),drho = drho)
        axiom = 'X'
        rules = dict([('X', 'F]{{X}[X}[F{[FX}]X'), ('F', 'FF')])
        params = dict(dazimuthal=gtl.rad(90), drho=drho)
        pg = pgr.planargraph()
        for piece in lsy.lgen(p, d, axiom, rules, i, **params):
            if isinstance(piece, tuple):
                p1, p2 = piece
                v1, v2 = pg.fp(p1, drho / 2), pg.fp(p2, drho / 2)
                rdkws = {'style': 'urban'}
                e12 = pg.fe(v1, v2, **rdkws)
            elif isinstance(piece, vec3):
                pass

        #for v in pg.vs:
        #    if v is None:continue
        #    p = v[1]['p']
        #    p.ztrn(t(p.x,p.y))

        #pyscale = vec3(0,1,0).prjps(py)
        #tipscale = vec3(0,1,0).prjps(tip.loop)
        #pyscale = pyscale[1]-pyscale[0]
        #tipscale = tipscale[1]-tipscale[0]
        #scale = tipscale/pyscale
        #com = vec3(0,0,0).com(tip.loop).tov(vec3(0,0,0).com(py)).uscl(-1)
        #for p in py:p.scl(vec3(scale,scale,0)).trn(com)

        print('ROADS')
        ax = dtl.plot_axes_xy(200)
        ax = pg.plotxy(ax)
        plt.show()
        #pdb.set_trace()
        return pg
Ejemplo n.º 19
0
def ___lsystemboundary(b):
    p, d, i, axiom, rules = ((vec3(0, 0, 0), vec3(0, 1, 0), 5, 'X',
                              dict([('X', '{[[X}{]X}F]X'), ('F', 'FA'),
                                    ('A', 'F')])))
    params = dict(dazimuthal=gtl.rad(25.7), drho=20)

    pg = dpg.planargraph()
    for piece in lsy.lgen(p, d, axiom, rules, i, **params):
        if isinstance(piece, tuple):
            p1, p2 = piece
            v1, v2 = pg.fp(p1, 10), pg.fp(p2, 10)
            e12 = pg.fe(v1, v2)
        elif isinstance(piece, vec3):
            pass
    py = pym.pgtopy(pg, 5)[0]
    py = pym.smoothxy(py, 0.5, 2)
    #py = pym.aggregate(py,2)
    py = pym.pinchb(py, 5)

    #ax = dtl.plot_axes_xy(400)
    #ax = pg.plotxy(ax,l = 300)
    #ax = dtl.plot_polygon_xy(b,ax,lw = 3,col = 'b')
    #ax = dtl.plot_polygon_xy(py,ax,lw = 3,col = 'g')
    #plt.show()

    pyscale = vec3(0, 1, 0).prjps(py)
    tipscale = vec3(0, 1, 0).prjps(b)
    pyscale = pyscale[1] - pyscale[0]
    tipscale = tipscale[1] - tipscale[0]
    scale = tipscale / pyscale
    com = vec3(0, 0, 0).com(b).tov(vec3(0, 0, 0).com(py)).uscl(-1)
    for p in py:
        p.scl(vec3(scale, scale, 0)).trn(com)

    ax = dtl.plot_axes_xy(400)
    ax = dtl.plot_polygon_xy(b, ax, lw=3, col='b')
    ax = dtl.plot_polygon_xy(py, ax, lw=3, col='g')
    plt.show()

    return py
Ejemplo n.º 20
0
def ___lsystemboundary(b):
    p,d,i,axiom,rules = ((vec3(0,0,0),vec3(0,1,0),5,
        'X',dict([('X','{[[X}{]X}F]X'),('F','FA'),('A','F')])))
    params = dict(dazimuthal = gtl.rad(25.7),drho = 20)

    pg = dpg.planargraph()
    for piece in lsy.lgen(p,d,axiom,rules,i,**params):
        if isinstance(piece,tuple):
            p1,p2 = piece
            v1,v2 = pg.fp(p1,10),pg.fp(p2,10)
            e12 = pg.fe(v1,v2)
        elif isinstance(piece,vec3):pass
    py = pym.pgtopy(pg,5)[0]
    py = pym.smoothxy(py,0.5,2)
    #py = pym.aggregate(py,2)
    py = pym.pinchb(py,5)

    #ax = dtl.plot_axes_xy(400)
    #ax = pg.plotxy(ax,l = 300)
    #ax = dtl.plot_polygon_xy(b,ax,lw = 3,col = 'b')
    #ax = dtl.plot_polygon_xy(py,ax,lw = 3,col = 'g')
    #plt.show()

    pyscale = vec3(0,1,0).prjps(py)
    tipscale = vec3(0,1,0).prjps(b)
    pyscale = pyscale[1]-pyscale[0]
    tipscale = tipscale[1]-tipscale[0]
    scale = tipscale/pyscale
    com = vec3(0,0,0).com(b).tov(vec3(0,0,0).com(py)).uscl(-1)
    for p in py:p.scl(vec3(scale,scale,0)).trn(com)

    ax = dtl.plot_axes_xy(400)
    ax = dtl.plot_polygon_xy(b,ax,lw = 3,col = 'b')
    ax = dtl.plot_polygon_xy(py,ax,lw = 3,col = 'g')
    plt.show()

    return py
Ejemplo n.º 21
0
 def test_adist(self):
     deg10 = gtl.rad(10)
     self.assertEqual(gtl.isnear(gtl.adist(deg10*2,deg10*6),deg10*4),1)
     self.assertEqual(gtl.isnear(gtl.adist(deg10*6,deg10*2),deg10*4),1)
     self.assertEqual(gtl.isnear(gtl.adist(deg10*6,deg10*22),deg10*16),1)
     self.assertEqual(gtl.isnear(gtl.adist(deg10*6,deg10*32),deg10*10),1)
Ejemplo n.º 22
0
 def test_rad(self):
     self.assertEqual(gtl.isnear(gtl.rad(180), gtl.PI), 1)
Ejemplo n.º 23
0
 def test_rad(self):
     self.assertEqual(gtl.isnear(gtl.rad(180),gtl.PI),1)