Posté le 18/01/2024 18:40
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
Citer : Posté le 18/01/2024 18:42 | #
Tu utilise quel méthode pour faire ton polygone?
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"
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
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
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
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
lointres loin de l'etre )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)
Caltos : G35+EII, G90+E (briquée )
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
Citer : Posté le 18/01/2024 19:20 | #
Tu peux demander en MP a un bon connaisseur en python comme
moiCritor ou Ne0tux par exempleCiter : 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.
Caltos : G35+EII, G90+E (briquée )
Citer : Posté le 18/01/2024 19:25 | #
Tres bon point Fcalva! je n'y avait pas pensé
Citer : Posté le 18/01/2024 22:31 | #
S'ils sont pas trop gros juste un bitmap pour être honnête...
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.
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.
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).
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().
Citer : Posté le 19/01/2024 19:18 | #
je me suis amusé à coder pour faire des polygones
c'est une ébauche
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 ?
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.
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 :
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.
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])
Citer : Posté le 20/01/2024 15:50 | #
Pour les concaves c’est au cas par cas, celui de ton illustration devrait passer.