# paramètres à choisir
(L,l)=(10,3)
xmin,xmax=0,4
chemin = "/Users/vincentdouce/)tout/Maths_Lycee_Prepa_site/Informatique/gammes/gammes!images/"
nom="re12.png"
F=3# Fondamentale : 0=do,2=ré,4=mi,5=fa,7=sol,9=la,11=si
marge=0.3 # marges haut/bas (le double pour gauche/droite)
ncases=5 # nombre de cases visibles donc (ncases+1) barettes visibles
N=0 # case désirée (N=0 -> position de base)
NN=N # case où l'on va afficher le numéro de la case (par défaut N)

# modules
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl

# quelques paramètres par défaut
plt.style.use('bmh') # pour la police des équations
mpl.rcParams['font.family'] = 'STIXGeneral' # sert à rien ?
plt.rcParams["font.size"] = 10
plt.rcParams['axes.facecolor'] = "white" # font blanc pour les graphiques (bmh met du gris)

# fonctions diverses
def ladroite(x1,y1,x2,y2):
    m=(y2-y1)/(x1-x1)
    lafigure.plot([1,2],[1.1,0], color ='black', linewidth=0.5, linestyle="-")

# calcul automatique axe Y et limites du quadrillage
rapport=L/l
demideltay=(xmax-xmin)/rapport/2
ymin,ymax=0,2*demideltay
g,d=xmin+3*marge,xmax-3*marge #limites des x pour les cordes
b,h=ymin+marge,ymax-marge #limites des y pour les cordes

# définition de la figure + divers paramètres
Linch,linch=(L/2.54,l/2.54)
fig, lafigure = plt.subplots(figsize=(Linch,linch))
lafigure.set_visible
fig.tight_layout()  # to nicely fit the subplot(s) in the figure
lafigure.axis([xmin,xmax,ymin,ymax]) # permet que si qqch dépasse ça ne perturbe rien ; ouf...
fig.tight_layout(pad=0.0) # permet qu'on voie bien les graduations
#lafigure.grid('true')
#lafigure.axis('on',color='white')
plt.axis('on')
plt.xticks([0],['$\;$'])
plt.yticks([0],['$\;$'])

# variables diverses
nn=ncases+1
ecart=(h-b)/5 # écart entre les cordes
deltax=(d-g)/(nn-1) # écart entre les barres
epNN=0.03 # largeur entre les doubles barres
ekk=0.1 # pour les ronds à gauche
ekn=0.17 # décalage en dessous pour affichage numéro case

# tracé des cordes
y=b
Cordes_ordonnee=[]
for i in range(6):
    Cordes_ordonnee.append(y)
    lafigure.plot([g,d],[y,y], color ='black', linewidth=0.5, linestyle="-")
    y=y+ecart

# tracé des barres
x=g
for i in range(nn):
    lafigure.plot([x,x],[b,h], color ='black', linewidth=0.5, linestyle="-")
    x=x+deltax

# listes diverses
Majeure=[0,2,4,5,7,9,11] #do=0
GammeChoisie=[(x+F)%12 for x in Majeure]
Cordes=[4,9,2,7,11,4] #mi,la,ré,sol,si,mi (do=0)
Cordes_zip=list(zip(Cordes,Cordes_ordonnee))
nombredecases=nn-1
Cases=[g-ekk]+[g+deltax/2+i*deltax for i in range(nn)] # position des ronds
Romains=["","I","II","III","IV","V","VI","VII","VIII","IX","X","XI","XII"]

# affichage numéro de la case
if not(N==0 and NN==0):
    plt.text(Cases[NN-N],b-ekn,Romains[NN], ha='center', va='center', alpha=1)

# positions case N
N=(N-1)*(N!=0) #car les positions 1 ou 0 sont les memes !
for corde in Cordes_zip: #corde est un tuple
    for note in GammeChoisie:
        numero=(note-corde[0]-N-1)%12
        # affichage du point sur la corde et sur la case :
        if (numero>=0) and (numero<=nn-2):
            lafigure.scatter([Cases[numero+1]],[corde[1]], 25, color ='black')
        # affichage du point pour la corde à vide :
        if (note==corde[0]):
            lafigure.plot([Cases[0]],[corde[1]],linestyle='none', marker='$\circ$', markeredgecolor='k',alpha=0.5)
 
            #lafigure.scatter([Cases[0]],[corde[1]], 25, color ='black', alpha=.2)

# barette du sillet pour N=0
if (N==0):
    lafigure.plot([g-epNN,g-epNN],[b,h], color ='black', linewidth=0.5, linestyle="-")

# enregistrement
#plt.savefig(chemin+nom, dpi=288)
plt.show()
