Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
4995 connectés 

  FORUM HardWare.fr
  Programmation

  [algorithmie] 2D colorier l'intérieur d'un polygone (fermé)

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[algorithmie] 2D colorier l'intérieur d'un polygone (fermé)

n°200283
farib
Posté le 22-08-2002 à 23:36:29  profilanswer
 

voila je me demande comment colorier tous les points a l'intérieur d'un polygone fermé, comme avec le "pot de peinture" dans un logiciel de dessin
 
 
je pensais un un algo un peu récursif : je trouve un point a l'intérieur du polygone, et je colorie ses voisins de maniere récursive jusqu'a trouver un bord, et ainsi de suite
 
 
Voisin Voisin Voisin
Voisin Point  Voisin
Voisin Voisin Voisin
 
 
est-ce une bonne idée ? sera-ce suffisemment rapide au aurais-je assez de mémoire ?
 
faut-il que j'emprunte un voir completement différente ?
 
 
bref, vos avis sont les bienvenus

mood
Publicité
Posté le 22-08-2002 à 23:36:29  profilanswer
 

n°200290
zion
Plop
Posté le 23-08-2002 à 00:28:38  profilanswer
 

Le FloodFill ca te dit rien?
 
Pourquoi réinventer la roue?  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
n°200295
farib
Posté le 23-08-2002 à 00:43:03  profilanswer
 

ug ?

n°200296
zion
Plop
Posté le 23-08-2002 à 00:45:52  profilanswer
 

Benh quoi, que tu utilises un Canvas ou Windows ou l'équivalent sous QT tu as toujours un FloodFill, alors pourquoi te casser le cul à le refaire.
 
Enfin, sinon la solution récursive c'est ptre pas géant, ca risque de faire beaucoup... Enfin si tu veux un bon exemple, télécharge GD, y a les sources évidemment  ;)


---------------
Informaticien.be - Lancez des défis à vos amis
n°200298
farib
Posté le 23-08-2002 à 00:49:50  profilanswer
 

sinon le vrai algo c'est quoi ?
en fait, je souhaite réinventer la roue pour mon ego :D


Message édité par farib le 23-08-2002 à 00:50:46
n°200325
rufo
Pas me confondre avec Lycos!
Posté le 23-08-2002 à 08:53:48  profilanswer
 

le mieux, c'est l'algo de remplissage par des lignes horizontales entre 2 côtés du polygone. J'avais trouvé ça sur un site très bien fait pour la 2D et 3D. Si tu veux, file moi ton e-mail, et je pourrais t'envoyer le source et l'algo... :)

n°200326
rufo
Pas me confondre avec Lycos!
Posté le 23-08-2002 à 08:54:16  profilanswer
 

j'avais fait ça pour un petit moteur 3D en VC++ (sans directX)

n°200389
farib
Posté le 23-08-2002 à 10:50:20  profilanswer
 

pas con le remplissage par ligne...
 
 
 
sinon pour mon "récursif", la profondeur maximale d'appel serait la dimension maximale de l'image.... ca peut aller, 1000 appels d'un tout petit algo, ca va pas surcharger la pile....

n°200484
Krueger
tout salaire demande dutravail
Posté le 23-08-2002 à 12:52:50  profilanswer
 

Le remplissage par ligne, c'est pas celui avec l'histoire d'empilement de "germes"?


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°200490
Carbon_14
Posté le 23-08-2002 à 12:58:02  profilanswer
 

Si on fait
for (y = 0 to YMax)
  for (x = 0 to XMax)
    if (PointDansPolygone(x,y) = TRUE) then
      CouleurPoint(x,y) = CouleurDesirée
  next x
next y
 
c'est pas bon ?
 
Il faut "juste" coder la fonction PointDansPolygone() en ne prenant pas les traits de bordure si y en a :).

mood
Publicité
Posté le 23-08-2002 à 12:58:02  profilanswer
 

n°200537
Krueger
tout salaire demande dutravail
Posté le 23-08-2002 à 13:42:01  profilanswer
 

Tu vas parcourir toute ton image pour un polygone. S'il est très petit, il y a beaucoup plus efficace, même si ça marche.


---------------
"Colère et intolérance sont les ennemis d'une bonne compréhension." Gandhi
n°200543
bjone
Insert booze to continue
Posté le 23-08-2002 à 13:48:53  profilanswer
 

bon:
 
1) Est-ce que ton polygone est connu ?
du style tu as une liste (x,y) de pt1,pt2,pt3,pt4....
 
2) Ou est que tu veux vraiment faire un floodfill, du style tu as un contour fermé qu'il soit en segments linéaires, en coube, ou sgui-sgui-sgui, tu tu veux colorer toute la surface contenue dans le contour... Ou plustôt colorier à la couleur B touts les pixels de la couleur A ou tu as cliqué avec la souris, qui sont aussi en "contact" le pixel ?
 
Pour la 1, il faut faire un traçage ligne par ligne (scanline),
tu tries tes points par le Y de haut en bas, et tu traçes tes lignes horizontales, de de haut en bas, en résolvant le X de début et de fin de ta ligne, en fonction des segments à "gauche" et à "droite" de ta ligne.
 
Pour la 2, à partir d'un clic à une position X,Y, pour refaire le floodfill fo partir du point au ta cliquer et se propager au niveau des lignes en haut en bas à partir de ce point...
Tu colories tous les pixels A en B, et tu regardes pour la propagation vers le haut, si la ligne plus haut que la courante à des pixels à la couleur A en contact avec des pixels à la couleur A de la ligne courante....
Symétrique pour la propgation vers le bas...
 
enfin c'est des idées...
 
Mais la première chose à faire c'est bien indentifier ce que tu dois faire....


Message édité par bjone le 23-08-2002 à 13:51:51
n°200546
bjone
Insert booze to continue
Posté le 23-08-2002 à 13:54:53  profilanswer
 

Première chose: oublie la récursivité, pour ce genre de truc il vaux mieux une approche itérative, et ça évite de vautrer la pile....

n°200550
tomlameche
Et pourquoi pas ?
Posté le 23-08-2002 à 14:01:35  profilanswer
 

carbon_14 a écrit a écrit :

Si on fait
for (y = 0 to YMax)
  for (x = 0 to XMax)
    if (PointDansPolygone(x,y) = TRUE) then
      CouleurPoint(x,y) = CouleurDesirée
  next x
next y
 
c'est pas bon ?
 
Il faut "juste" coder la fonction PointDansPolygone() en ne prenant pas les traits de bordure si y en a :).  




Tu peux faire pareil en limittant la boucle : en prenant y à partir du YMax du polygone et x à partir du XMax. ca devrai pas être trop compliqué de connaitre le carré ou le rectangle dans lequel s'inscrit ton polygone, surout s'il est construit segment par segment ( tu récupère les Xmax et YMax à chaque fois qu'on ajoute un segement ).

n°200641
Carbon_14
Posté le 23-08-2002 à 15:29:36  profilanswer
 

C'est ce que je sous-entendais :ange:.
 
Si le polygone est concave, ça complique le module d'appartenance, sauf qu'il suffit de prendre le rectangle qui le contient pour l'exploration.
 
Il vaut mieux faire comme avec un pinceau à la main que de chercher des ruses tarabiscotées.

n°200983
farib
Posté le 23-08-2002 à 21:41:42  profilanswer
 

j'ai vu en effet déja des topics sur les triangles....
 
 
j'ai déja dnas mes cartons un algo qui dit si un pt est a l'intérieur d'un triangle, maintenant il faut que je triangurlarise un polygone....c cho :lol:
 
fo ke je réfléchisse a un algo

n°201019
bjone
Insert booze to continue
Posté le 23-08-2002 à 22:17:06  profilanswer
 

pour traçer un triangle en 2D, vo mieux pas passer par une routine qui teste si un point est dans un triangle :D

n°201842
rufo
Pas me confondre avec Lycos!
Posté le 26-08-2002 à 11:15:04  profilanswer
 

farib a écrit a écrit :

j'ai vu en effet déja des topics sur les triangles....
 
 
j'ai déja dnas mes cartons un algo qui dit si un pt est a l'intérieur d'un triangle, maintenant il faut que je triangurlarise un polygone....c cho :lol:
 
fo ke je réfléchisse a un algo




 
t'as reçu ce que je t'ai envoyé? Si oui, ça t'a aidé?

n°201901
Carbon_14
Posté le 26-08-2002 à 12:48:33  profilanswer
 

Le sommet de tout polygône est aussi le sommet d'un triangle qui a les deux segments/côtés communs.
Si le point considéré appartient à TOUS les triangles qui ont pour sommet les points du polygone, il est dans le polygone.
Si concave, plus facile car direct. Convexe, faut voir...

n°201902
farib
Posté le 26-08-2002 à 12:49:26  profilanswer
 

oui, DSL j'ai pas répondu, les explications sont claires, et le reste fourni avec est également tres intéressant ( j'aimerais bien air e le TP 3D dans mon école :D )


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [algorithmie] 2D colorier l'intérieur d'un polygone (fermé)

 

Sujets relatifs
pq mon topic à été fermé :([HTML] div avec margin intérieur et extérieur...
[VB 6] Lorsque je ferme l'application avec END, ca gèle pendant 1 min[Java] Applet qui perd le focus apres avoir ferme un ModalDialog ?
JS - fenetre qui s ouvre et qui se ferme quand on retire sa souris[?] comment on ferme un pop up?
[PHP] Envoyer une requête lorsque le navigateur se ferme[java] afficher une page html à l'intérieur d'une applet
Algorithmie, ca ressemble a koi ? 
Plus de sujets relatifs à : [algorithmie] 2D colorier l'intérieur d'un polygone (fermé)


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)