"""Le A dessiné sur mesure, en unités de la fonte (y vers le haut, capitale 730).

Sora ne peut pas fournir le triangle : son contre-poinçon reste un trapèze bas et large à
toutes les graisses. Le A est donc construit géométriquement — triangle à sommet plat, percé
de deux trous : le contre-poinçon triangulaire au-dessus de la barre, et l'écart entre les
jambes en dessous. La barre transversale est simplement ce qui reste entre les deux.
"""
CAP=730.0; W=790.0
APEX_HALF=45.0          # demi-largeur du sommet plat
LEG_IN=215.0            # bord intérieur de jambe à la ligne de base
INNER_TOP=372.0         # bord intérieur gauche au sommet du contre-poinçon
BAR_LO, BAR_HI = 155.0, 310.0   # barre transversale
CTR_TOP=690.0

def _inner_x(y):
    """Bord intérieur gauche à la hauteur y (droite = W - x)."""
    return LEG_IN + (INNER_TOP-LEG_IN)*(y/CTR_TOP)

def contours():
    outer=[(0,0),(W,0),(W/2+APEX_HALF,CAP),(W/2-APEX_HALF,CAP)]
    l0,l1=_inner_x(0), _inner_x(BAR_LO)
    gap=[(l0,0),(W-l0,0),(W-l1,BAR_LO),(l1,BAR_LO)]          # sous la barre
    c0,c1=_inner_x(BAR_HI), _inner_x(CTR_TOP)
    counter=[(c0,BAR_HI),(W-c0,BAR_HI),(W-c1,CTR_TOP),(c1,CTR_TOP)]   # le triangle
    return outer, gap, counter

def d(pts):
    return 'M '+' L '.join(f'{x:.1f} {y:.1f}' for x,y in pts)+' Z'

def paths():
    o,g,c=contours()
    return d(o)+' '+d(g)+' '+d(c), d(c), W      # (lettre evenodd, contre-poinçon, chasse)
