import sys NAR, LUZ, INK, BL = "#f04e23", "#f45a1c", "#111", "#fff" def ctrl(a, b, amp): (x0, y0), (x1, y1) = a, b dx, dy = x1 - x0, y1 - y0 L = (dx * dx + dy * dy) ** .5 px, py = -dy / L * amp, dx / L * amp return (x0 + dx / 3 + px, y0 + dy / 3 + py), (x0 + dx * 2 / 3 - px, y0 + dy * 2 / 3 - py) def c(p1, p2, fin): return f"C{p1[0]:.1f},{p1[1]:.1f} {p2[0]:.1f},{p2[1]:.1f} {fin[0]},{fin[1]}" def bandera(a, b, cc, d, amp, amp_b): der = ctrl(b, cc, amp) izq = ctrl(a, d, amp) abajo = ctrl(cc, d, amp_b) return (f"M{a[0]},{a[1]} H{b[0]} {c(der[0], der[1], cc)} {c(abajo[0], abajo[1], d)} " f"{c(izq[1], izq[0], a)} Z") def farola(estilo="aro", ink=INK, luz=LUZ, fondo=None, papel=BL): bg = f'' if fondo else "" if estilo == "aro": defs = '' cono = f'' suelo = "" poste = f'' cabeza = f'' aro = f'' return defs + cono + suelo + f'{poste}' + cabeza + aro pegatina = f'' poste = f'' cabeza = f'' rayos = "".join(f'' for x0, y0, x1, y1 in ((58, 35, 50, 52), (67, 36, 67, 56), (76, 35, 84, 52))) return f'{pegatina}{poste}{cabeza}{rayos}' def svg(cuerpo, fondo=None): bg = f'' if fondo else "" return f'{bg}{cuerpo}\n' if __name__ == "__main__": d = sys.argv[1] open(f"{d}/simbolo.svg", "w").write(svg(farola())) open(f"{d}/simbolo-negativo.svg", "w").write(svg(farola(ink=BL, papel=INK), INK)) open(f"{d}/simbolo-naranja.svg", "w").write(svg(farola(luz=BL, papel=NAR), NAR)) open(f"{d}/simbolo-pegatina.svg", "w").write(svg(farola("pegatina")))