Last active
August 20, 2025 15:23
-
-
Save bussiere/4ad8e471fe9b0de2962e5539bd5036b0 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from fpdf import FPDF | |
def generer_nombres_premiers(n): | |
"""Génère une liste des n premiers nombres premiers.""" | |
premiers = [] | |
candidat = 2 | |
while candidat < n: | |
est_premier = True | |
candidat_range=candidat | |
if candidat >=3: | |
candidat_range=int(candidat**0.5)+1 | |
for p in range(2,candidat_range): | |
if candidat%p ==0: | |
est_premier=False | |
break | |
if est_premier: | |
premiers.append(candidat) | |
candidat += 1 | |
return premiers | |
def dessiner_carre_nombres_premiers( | |
nom_fichier="carre_nombres_premiers.pdf", | |
taille_grille=10, | |
couleur_contour=(205, 0, 204), # Noir | |
couleur_fond=(140, 255, 251), # Blanc | |
couleur_points=(192, 68, 255) # Rouge | |
): | |
""" | |
Crée un fichier PDF avec un carré centré contenant des points | |
représentant des nombres premiers. | |
Args: | |
nom_fichier (str): Le nom du fichier PDF à générer. | |
taille_grille (int): Le nombre de lignes et de colonnes dans le carré (X). | |
couleur_contour (tuple): Tuple (R, G, B) pour la couleur du contour du carré. | |
couleur_fond (tuple): Tuple (R, G, B) pour la couleur de fond du carré. | |
couleur_points (tuple): Tuple (R, G, B) pour la couleur des points. | |
""" | |
# --- 1. Configuration de la page A2 --- | |
# Dimensions d'une page A2 en millimètres : 420 x 594 mm | |
largeur_page = 420 | |
hauteur_page = 594 | |
pdf = FPDF(orientation='P', unit='mm', format=(largeur_page,hauteur_page)) | |
pdf.add_page() | |
# --- 2. Paramètres du carré --- | |
# Pour centrer le carré, on prend la plus petite dimension de la page | |
taille_carre = min(largeur_page, hauteur_page) - 20 # Marge de 20mm de chaque côté | |
# Coordonnées du coin supérieur gauche du carré pour le centrer | |
x_carre = (largeur_page - taille_carre) / 2 | |
y_carre = (hauteur_page - taille_carre) / 2 | |
# --- 3. Dessin du carré (fond et contour) --- | |
taille_border=6 | |
pdf.set_fill_color(*couleur_contour) | |
pdf.rect(x_carre-taille_border, y_carre-taille_border, taille_carre+taille_border*2, taille_carre+taille_border*2, 'F') | |
# Couleur de fond | |
pdf.set_fill_color(*couleur_fond) | |
# Dessine le rectangle rempli et avec un contour ('FD') | |
pdf.rect(x_carre, y_carre, taille_carre, taille_carre, 'F') | |
# --- 4. Génération et dessin des points --- | |
nombre_total_points = taille_grille * taille_grille | |
nombres_premiers = generer_nombres_premiers(nombre_total_points) | |
#nombres_premiers.append(0) | |
#nombres_premiers = [] | |
#nombres_premiers.append(1) | |
#nombres_premiers.append(65) | |
#nombres_premiers.append(129) | |
#nombres_premiers.append(193) | |
#nombres_premiers.append(257) | |
#nombres_premiers.append(513) | |
# Définir la couleur pour les points | |
pdf.set_fill_color(*couleur_points) | |
# Calculer la taille de chaque "case" invisible dans le carré | |
taille_case = taille_carre / taille_grille | |
# Taille du point (un petit carré) | |
taille_point = taille_case / 2 | |
for i in nombres_premiers: | |
# Calculer la position (ligne, colonne) dans la grille | |
ligne = i // taille_grille | |
colonne = i % taille_grille -1 | |
if (i%taille_grille)==0: | |
ligne = ligne -1 | |
colonne = taille_grille-1 | |
# Calculer les coordonnées du centre de la case | |
centre_x = x_carre + (colonne * taille_case) + (taille_case / 2) | |
centre_y = y_carre + (ligne * taille_case) + (taille_case / 2) | |
# Coordonnées du coin supérieur gauche du point pour le centrer dans sa case | |
x_point = centre_x - (taille_point / 2) | |
y_point = centre_y - (taille_point / 2) | |
# Un "point" est ici un minuscule carré rempli, sans contour ('F') | |
pdf.rect(x_point, y_point, taille_point, taille_point, 'F') | |
#pdf.ellipse(x_point, y_point, taille_point, taille_point, 'F') | |
# --- 5. Sauvegarde du fichier --- | |
pdf.output(nom_fichier) | |
print(nombres_premiers) | |
print(len(nombres_premiers)) | |
print(f"Le fichier '{nom_fichier}' a été créé avec succès.") | |
# --- Exemple d'utilisation --- | |
if __name__ == "__main__": | |
dessiner_carre_nombres_premiers( | |
nom_fichier="mon_dessin_de_premiers.pdf", | |
taille_grille=64, # Un carré avec 25x25 = 625 nombres premiers | |
couleur_contour=(0,128,0), # Noir, | |
couleur_fond=(255,116,108),#(255,179,128), # Blanc | |
couleur_points=(0,1,1) | |
) | |
""" | |
couleur_contour=(175,233,255), # Noir, | |
couleur_fond=(255,207,234), # Blanc | |
couleur_points=(171,165,255) | |
pasteque: | |
couleur_contour=(215,76,68), # Noir, | |
couleur_fond=(255,116,108),#(255,179,128), # Blanc | |
couleur_points=(0,1,1) | |
demie : | |
couleur_contour=(255,116,108), # Noir, | |
couleur_fond=(255,179,128), # Blanc | |
couleur_points=(0,1,1) | |
Pasteque: | |
couleur_contour=(0,128,0), # Noir, | |
couleur_fond=(255,116,108),#(255,179,128), # Blanc | |
couleur_points=(0,1,1) | |
""" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment