Пример #1
0
def graphical(ao):
    r"""
    Return a sage graphics representation of the given acyclic orientation.
    """
    from sage.all import Graphics, point, line
    assert is_orientation(ao)
    n, ascents, descents = ao

    # compute heights
    height = [0]*n
    for _ in range(n):
        for (i, j) in ascents:
            height[j] = max(height[j], height[i]+1)
        for (i, j) in descents:
            height[i] = max(height[i], height[j]+1)

    # compute the extent of each interval
    left = range(n)
    right = range(n)
    for (i, j) in ascents:
        right[i] += .75
        left[j] -= .75
    for (i, j) in descents:
        right[i] += .75
        left[j] -= .75

    result = Graphics()

    # put in the ascents and descents
    for (i, j) in ascents:
        result += line([(i, height[i]), (j, height[j])],
                       color='red', thickness=2)
    for (i, j) in descents:
        result += line([(i, height[i]), (j, height[j])],
                       color='blue', thickness=2)

    # then put in the intervals
    for i in range(n):
        result += line([(left[i], height[i]), (right[i], height[i])],
                       color='black', thickness=2)
        result += point([(i, height[i])],
                       color='black', size=100)

    # reset some annoying options
    result.axes(False)
    result.set_aspect_ratio(1)
    return result
Пример #2
0
def healpix_diagram(a=1, e=0, shade_polar_region=True):
    r"""
    Return a Sage Graphics object diagramming the HEALPix projection
    boundary and polar triangles for the ellipsoid with major radius `a` 
    and eccentricity `e`.
    Inessential graphics method.
    Requires Sage graphics methods.
    """
    from sage.all import Graphics, line2d, point, polygon, text, RealNumber, Integer
    
    # Make Sage types compatible with Numpy.
    RealNumber = float
    Integer = int
    
    R = auth_rad(a, e)
    g = Graphics()
    color = 'black' # Boundary color.
    shade_color = 'blue'  # Polar triangles color.    
    dl = array((R*pi/2,0))
    lu = [(-R*pi, R*pi/4),(-R*3*pi/4, R*pi/2)]
    ld = [(-R*3*pi/4, R*pi/2),(-R*pi/2, R*pi/4)] 
    g += line2d([(-R*pi, -R*pi/4),(-R*pi, R*pi/4)], color=color) 
    g += line2d([(R*pi, R*pi/4),(R*pi, -R*pi/4)], linestyle = '--', 
                color=color)
    for k in range(4):
        g += line2d([array(p) + k*dl for p in lu], color=color) 
        g += line2d([array(p) + k*dl for p in ld], linestyle = '--', 
                    color=color)
        g += line2d([array(p) + array((k*R*pi/2 - R*pi/4, -R*3*pi/4)) 
                     for p in ld], color=color) 
        g += line2d([array(p) + array((k*R*pi/2 + R*pi/4, -R*3*pi/4)) 
                     for p in lu], linestyle = '--', color=color)
    pn = array((-R*3*pi/4, R*pi/2))
    ps = array((-R*3*pi/4, -R*pi/2))
    g += point([pn + k*dl for k in range(4)] +
               [ps + k*dl for k in range(4)], size=20, color=color)
    g += point([pn + k*dl for k in range(1, 4)] + 
               [ps + k*dl for k in range(1, 4)], color='white', size=10, 
               zorder=3)
    npp = [(-R*pi, R*pi/4), (-R*3*pi/4, R*pi/2), (-R*pi/2, R*pi/4)]
    spp = [(-R*pi, -R*pi/4), (-R*3*pi/4, -R*pi/2), (-R*pi/2, -R*pi/4)]

    if shade_polar_region:
        for k in range(4):
            g += polygon([array(p) + k*dl for p in npp], alpha=0.1, 
                         color=shade_color) 
            g += text(str(k), array((-R*3*pi/4, R*5*pi/16)) + k*dl, 
                      color='red', fontsize=20)
            g += polygon([array(p) + k*dl for p in spp], alpha=0.1, 
                         color=shade_color)
            g += text(str(k), array((-R*3*pi/4, -R*5*pi/16)) + k*dl,    
                      color='red', fontsize=20)    
    return g
Пример #3
0
    def graph_receivers(cls, pop):
        if not _nographics:
            s = Graphics()
            for i, (popi, popt) in enumerate(pop):
                if popt == 0: color = (.5, 0, 0)
                elif popt == 1: color = (0, 0, .5)
                elif popt == 2: color = (0, .5, 0)
                s += polygon([(i, 0), ((i + 1), 0), ((i + 1), popi),
                              (i, popi)],
                             rgbcolor=color)

            return s
        else:
            return None
Пример #4
0
def graphical(path):
    r"""
    Return a sage graphics representation of `path`.
    """
    from sage.all import Graphics, polygon
    assert is_dyck_path(path)
    result = Graphics()
    # first a row of triangles
    for i in range(len(path)):
        result += polygon([(2*i, 0),
                           (2*i+1, 1),
                           (2*i+2, 0)],
                          color='black', fill=False, thickness=2)
    # then all the boxes
    for i, j in boxes_under_path(path):
        result += polygon([(i+j, j-i),
                           (i+j+1, j-i+1),
                           (i+j+2, j-i),
                           (i+j+1, j-i-1)],
                          color='black', fill=False, thickness=2)
    # reset some annoying options
    result.axes(False)
    result.set_aspect_ratio(1)
    return result
Пример #5
0
 def show(self, unit=10, labels=True):
     from sage.all import circle, text, line, Graphics
     pos = self.basic_grid_embedding()
     for v, (a, b) in pos.items():
         pos[v] = (unit * a, unit * b)
     if not labels:
         verts = [circle(p, 1, fill=True) for p in pos.values()]
     else:
         verts = [
             text(repr(v), p, fontsize=20, color='black')
             for v, p in pos.items()
         ]
         verts += [circle(p, 1.5, fill=False) for p in pos.values()]
     edges = [
         line([pos[e.tail], pos[e.head]]) for e in self.edges
         if e not in self.dummy
     ]
     G = sum(verts + edges, Graphics())
     G.axes(False)
     return G
Пример #6
0
def rhealpix_diagram(a=1,
                     e=0,
                     north_square=0,
                     south_square=0,
                     shade_polar_region=True):
    r"""
    Return a Sage Graphics object diagramming the rHEALPix projection
    boundary and polar triangles for the ellipsoid with major radius `a` 
    and eccentricity `e`.
    Inessential graphics method.
    Requires Sage graphics methods.
    """
    from sage.all import Graphics, line2d, point, polygon, text, RealNumber, Integer
    # Make Sage types compatible with Numpy.
    RealNumber = float
    Integer = int

    R = auth_rad(a, e)
    g = Graphics()
    color = 'black'  # Boundary color.
    shade_color = 'blue'  # Polar triangles color.
    north = north_square
    south = south_square
    south_sq = [(-R * pi + R * south * pi / 2, -R * pi / 4),
                (-R * pi + R * south * pi / 2, -R * 3 * pi / 4),
                (-R * pi + R * (south + 1) * pi / 2, -R * 3 * pi / 4),
                (-R * pi + R * (south + 1) * pi / 2, -R * pi / 4)]
    north_sq = [(-R * pi + R * north * pi / 2, R * pi / 4),
                (-R * pi + R * north * pi / 2, R * 3 * pi / 4),
                (-R * pi + R * (north + 1) * pi / 2, R * 3 * pi / 4),
                (-R * pi + R * (north + 1) * pi / 2, R * pi / 4)]
    # Outline.
    g += line2d(south_sq, linestyle='--', color=color)
    g += line2d(north_sq, linestyle='--', color=color)
    g += line2d([(R * pi, -R * pi / 4), (R * pi, R * pi / 4)],
                linestyle='--',
                color=color)
    g += line2d([
        north_sq[0], (-R * pi, R * pi / 4), (-R * pi, -R * pi / 4), south_sq[0]
    ],
                color=color)
    g += line2d([south_sq[3], (R * pi, -R * pi / 4)], color=color)
    g += line2d([north_sq[3], (R * pi, R * pi / 4)], color=color)
    g += point([south_sq[0], south_sq[3]], size=20, zorder=3, color=color)
    g += point([north_sq[0], north_sq[3]], size=20, zorder=3, color=color)
    g += point([(R * pi, -R * pi / 4), (R * pi, R * pi / 4)],
               size=20,
               zorder=3,
               color=color)
    g += point([(R * pi, -R * pi / 4), (R * pi, R * pi / 4)],
               size=10,
               color='white',
               zorder=3)
    if shade_polar_region:
        # Shade.
        g += polygon(south_sq, alpha=0.1, color=shade_color)
        g += polygon(north_sq, alpha=0.1, color=shade_color)

    # Slice square into polar triangles.
    g += line2d([south_sq[0], south_sq[2]], color='lightgray')
    g += line2d([south_sq[1], south_sq[3]], color='lightgray')
    g += line2d([north_sq[0], north_sq[2]], color='lightgray')
    g += line2d([north_sq[1], north_sq[3]], color='lightgray')

    # Label polar triangles.
    sp = south_sq[0] + R * array((pi / 4, -pi / 4))
    np = north_sq[0] + R * array((pi / 4, pi / 4))
    shift = R * 3 * pi / 16
    g += text(str(south), sp + array((0, shift)), color='red', fontsize=20)
    g += text(str((south + 1) % 4),
              sp + array((shift, 0)),
              color='red',
              rotation=90,
              fontsize=20)
    g += text(str((south + 2) % 4),
              sp + array((0, -shift)),
              color='red',
              rotation=180,
              fontsize=20)
    g += text(str((south + 3) % 4),
              sp + array((-shift, 0)),
              color='red',
              rotation=270,
              fontsize=20)
    g += text(str(north), np + array((0, -shift)), color='red', fontsize=20)
    g += text(str((north + 1) % 4),
              np + array((shift, 0)),
              color='red',
              rotation=90,
              fontsize=20)
    g += text(str((north + 2) % 4),
              np + array((0, shift)),
              color='red',
              rotation=180,
              fontsize=20)
    g += text(str((north + 3) % 4),
              np + array((-shift, 0)),
              color='red',
              rotation=270,
              fontsize=20)
    return g