Les membres ayant 30 points peuvent parler sur les canaux annonces, projets et hs du chat.
La shoutbox n'est pas chargée par défaut pour des raisons de performances. Cliquez pour charger.

Forum Casio - Autres questions


Index du Forum » Autres questions » remplir une zone en python
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

remplir une zone en python

Posté le 18/01/2024 18:40

Bonjour


J'essaie de fabriquer un chrono -- ou autre -- avec des pseudos afficheurs 7 segments.

Pour dessiner les segments, je fabrique des polygones, mais je ne me demande comment faire pour les remplir. En faisant des polygones de plus en plus petits ?

Je suppose qu'il existe des algos.

Merci de vos conseils


1, 2 Suivante
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 18/01/2024 18:42 | #


Tu utilise quel méthode pour faire ton polygone?
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 18/01/2024 18:50 | #


J'utilise dline() avec laquelle je dessine chacun des 6 traits du polygone
code de test pour les polygones "horizontaux"

def segh(x,y,c=5):
  dline(x+2*c,y,x+5*c,y,3)
  dline(x+2*c,y+2*c,x+5*c,y+2*c,3)
  dline(x+c,y+c,x+2*c,y,3)
  dline(x+c,y+c,x+2*c,y+2*c,3)
  dline(x+6*c,y+c,x+5*c,y,3)
  dline(x+6*c,y+c,x+5*c,y+2*c,3)


le dernier paramètre 3 est par paresse (dans mes tests) pour ne pas écrire C_BLACK
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 18/01/2024 18:53 | #


Tu peux t'amuser a rajouter 3 autre dline() pour le remplir (si tu vois ce que je veux dire). Sinon je ne vois pas comment je l'aurai fais
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 18/01/2024 19:07 | #


Certes, mais j'ai mis des constantes dans mes tests, mais à terme l'affichage sera plus ou moins gros selon le contexte.
Par exemple
je peux faire des boucles, mais je me demande si il n'y a pas d'autres méthodes
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 18/01/2024 19:09 | #


Moi je ne vois pas comment faire d'autre a part de faire une boucle d'itérations en fonction de la constante. Mais je ne suis pas le plus fort (et je suis loin tres loin de l'etre )
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Fcalva Hors ligne Membre Points: 603 Défis: 10 Message

Citer : Posté le 18/01/2024 19:13 | #


Alors soit tu remplis à la main à coups de drect() et dpixel(), soit tu remplis juste pas. En vrai comme ça c'est assez bien, et en plus petit ça doit être mieux.
(Je dis ça pour des raisons de perfs - sinon tu peux faire un algo de remplissage mais bon)
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 18/01/2024 19:16 | #


je sais que dans le code geolib il y a déjà les fonctions polygone et remplissage.

Je peux m'en inspirer, mais ça m'a l'air un peu complexe tout de même
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 18/01/2024 19:20 | #


Tu peux demander en MP a un bon connaisseur en python comme moi Critor ou Ne0tux par exemple
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Fcalva Hors ligne Membre Points: 603 Défis: 10 Message

Citer : Posté le 18/01/2024 19:24 | #


Non c'est pas la meilleure option, une solution trouvée comme ça ne sera pas retrouvable par le public.
Pour les algos de remplissage, tu peux aller sur ton moteur de recherche de préférence, mais une solution simple serait d'aller de pixel en pixel jusqu'au bords par exemple.
Pc master race - Apréciateur de Noctua moyen
Caltos : G35+EII, G90+E (briquée )
Tuper4 Hors ligne Membre Points: 889 Défis: 19 Message

Citer : Posté le 18/01/2024 19:25 | #


Tres bon point Fcalva! je n'y avait pas pensé
When the doorbell rings at three in the morning, it’s never good news. -Anthony Horowitz
Lephenixnoir Hors ligne Administrateur Points: 24689 Défis: 170 Message

Citer : Posté le 18/01/2024 22:31 | #


S'ils sont pas trop gros juste un bitmap pour être honnête...
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 19/01/2024 08:27 | #


Merci ! C'est un peu l'idée qui m'était venue à l'esprit hier soir après avoir tout éteint. 🙂
Comme quoi il faut mieux éviter de partir bille en tête et réfléchir avant.
Ce sera un nouvel apprentissage car je n'ai jamais codé de dessins ni de sprites. (Encore moins les collisions , mais ce n'est pas le sujet)
Je vais chercher sur le forum si il y a des exemples.
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Lephenixnoir Hors ligne Administrateur Points: 24689 Défis: 170 Message

Citer : Posté le 19/01/2024 17:44 | #


Une version de support d'images arrive via gint (j'ai du code à tester en ce moment-même) donc à un moment ça devrait se ramener à un PNG + une conversion auto.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2414 Défis: 17 Message

Citer : Posté le 19/01/2024 17:53 | #


Je vais aussi regarder pour une routine de tracé de polygones avec gint.
Par contre faut que je comprenne comment on passe une liste en paramêtre d'une fonction et surtout comment on la récupère dans PythonExtra pour la traiter dans le code en C.

J'ai déjà la routine en C, mais je sais pas trop comment rendre le code compatible pour la rendre appelable depuis le code Python (ca passe des tableaux de coordonnées comme arguments).
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Lephenixnoir Hors ligne Administrateur Points: 24689 Défis: 170 Message

Citer : Posté le 19/01/2024 17:55 | #


Ok pour les fonctions de ce type dans gint. Oublie pas que tout ce qui est codé dans MonochromeLib peut être récupéré déjà.

Quand tu as une liste en Python tu peux utiliser mp_obj_list_get() de <py/obj.h> pour obtenir un pointeur vers le tableaux des éléments de la liste. Et tu peux ensuite convertir chaque élément en entier. Si ta fonction C demande un tableau il faudra que tu en crées un sur la pile ou avec malloc().
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 19/01/2024 19:18 | #


je me suis amusé à coder pour faire des polygones
c'est une ébauche

from gint import *

def dpoly(p,color=C_BLACK):
  n=len(p)-2
  for i in range(0,n,2):
    dline(p[i],p[i+1],p[i+2],p[i+3],color)
  dline(p[0],p[1],p[n],p[n+1],color)
#-----
dclear(C_WHITE)      
dpoly([0,0,127,0,127,63,0,63])
dupdate()
getkey()

Votre avis ?
Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Lephenixnoir Hors ligne Administrateur Points: 24689 Défis: 170 Message

Citer : Posté le 19/01/2024 19:26 | #


J'approuve ! Et j'approuve aussi le fait de ne pas faire des paires genre [(0,0), (127,0), (127,63), (0,63)] parce que créer et détruire des tuples tout le temps ça défonce les perfs (cf. casioplot.get_pixel()).

Avec une implémentation native on devrait pouvoir supporter les polygones pleins aussi.
Mon graphe (11 Avril): ((Rogue Life || HH2) ; PythonExtra ; serial gint ; Boson X ; passe gint 3 ; ...) || (shoutbox v5 ; v5)
Slyvtt En ligne Maître du Puzzle Points: 2414 Défis: 17 Message

Citer : Posté le 20/01/2024 12:55 | #


Bon pour info, ça avance.

J'ai proposé une fonction dpoly() dans gint qui effectue le rendu de polygones convexes avec remplissage.
J'ai aussi ajouté dans PythonExtra (en cours de tests) le pendant de la fonction avec une syntaxe type Python, à savoir :
dpoly( list_of_2D_vertices, fillcolor, border_color )

Par exemple dpoly( [0,0,127,0,127,63,0,63], C_NONE, C_BLACK ) pour avoir juste la bordure ou dpoly( [0,0,127,0,127,63,0,63], C_RED, C_BLUE ) pour avoir un rectangle rouge avec bordure bleue.
Les vertices sont une liste avec un empilement successif des xn, yn du style [ x0, y0, x1, y1, ..., xn, yn ]
Je teste un peu plus et je pousserai une PR.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
Ptitjoz Hors ligne Membre Points: 274 Défis: 10 Message

Citer : Posté le 20/01/2024 14:24 | #


Si je comprends bien, on pourra dessiner tous les polygones, mais on ne pourra remplir que les polygones convexes (et pas les concaves) ?


dpoly([40,0,0,30,40,40,0,50,40,60,100,40])

Un peu poète, un peu geek, un peu rêveur, un peu écolo.

Slyvtt En ligne Maître du Puzzle Points: 2414 Défis: 17 Message

Citer : Posté le 20/01/2024 15:50 | #


Pour les concaves c’est au cas par cas, celui de ton illustration devrait passer.
There are only 10 types of people in the world: Those who understand binary, and those who don't ...
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v4.3 © créé par Neuronix et Muelsaco 2004 - 2024 | Il y a 90 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd