Remplissage de polygones [Résolu]

cs_barbichette 247 Messages postés lundi 30 octobre 2000Date d'inscription 15 juillet 2013 Dernière intervention - 19 nov. 2006 à 14:10 - Dernière réponse : cs_barbichette 247 Messages postés lundi 30 octobre 2000Date d'inscription 15 juillet 2013 Dernière intervention
- 22 nov. 2006 à 00:08
Bonjour à tous.
Je cherche un algo pour remplir un polygone concave ou convexe sans utiliser le GDI.
J'ai donc une liste de points quelconques, et je veux savoir si un point du plan est dans ou en dehors du polygone.

Les méthodes classiques comme le scanline ne fonctionnent a priori pas puisqu'il faud un poly convexe. sniff...

Quelqu'un aurait une idée, une astuce, un site, quelque chose.. je ne asis pas
Je suis désespéré, je trouve rien sur Internet...

Barbichette
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 19 nov. 2006 à 14:56
3
Merci
sinon la solution manuelle : tu cree une droite querlconque qui passe par ton point, et tu regarde les intersections avec les cotes de ton poly qui sont des points t pas des segments. si le nombre d'intersections avant et apres ton poly sont impaires, alors le pointest dans le polygone.

Merci Guillemouze 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Guillemouze
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 nov. 2006 à 14:21
0
Merci
Salut,

FloodFill peut être ?

procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle);

Utilisez la méthode FloodFill pour remplir une zone, pas nécessairement rectangulaire, de l'image avec la valeur de Brush. Les limites de la région à remplir sont déterminées en se déplaçant dans toutes les directions à partir du point (X,Y) jusqu'à ce qu'une limite de couleur impliquant le paramètre Color soit rencontrée.

Le paramètre FillStyle détermine le style de remplissage, c'est-à-dire le type de modification de couleur qui définit les limites. Il peut prendre une des valeurs suivantes.
 
@+
Cirec

Commenter la réponse de Cirec
cs_barbichette 247 Messages postés lundi 30 octobre 2000Date d'inscription 15 juillet 2013 Dernière intervention - 19 nov. 2006 à 14:26
0
Merci
le problème, c'est que je ne dessine pas dans un canvas, et je ne veux pas utiliser le GDI.
Car, c'est dans un cas bien particulier.
Il me faud plus un algo qu'une fonction toute faite.

Merci quand même
Commenter la réponse de cs_barbichette
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 nov. 2006 à 14:39
0
Merci
le fait de ne pas dessiner dans un Canvas n'est pas un problème pour utiliser TCanvas
mais comme tu ne veux pas utiliser le GDI ...
sinon il y a ça :
http://www.delphifr.com/codes/COMMENT-REMPLIR-POLYGONE-SANS-UTILISER-GDI-WINDOWS_39053.aspx

Mais on ne sait pas ce qu'il y a dedans ...
l'auteur utilise une DLL mais ne donne pas la source de cette dernière !!!!

 
@+
Cirec

Commenter la réponse de Cirec
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 19 nov. 2006 à 15:16
0
Merci
Dans ce cas il est plus simple de transformer le poly en Région et de tester le point avec :

If PtInRegion(RGN: HRGN; X, Y: Integer) Then ...

et pour accelerer le mouvement rien ne t'empêche d'utiliser ScanLine

ce qui au final, a mon avis, serat bien plus rapide .

 
@+
Cirec

Commenter la réponse de Cirec
cs_barbichette 247 Messages postés lundi 30 octobre 2000Date d'inscription 15 juillet 2013 Dernière intervention - 20 nov. 2006 à 11:00
0
Merci
Merci bien pour le systeme de région. Je vais voir ça.
Par contre, Guillemouze, j'ai pas bien suivi ton explication. Mais ça m'intéresse quand même...
les intersections avec les cotes de ton poly qui sont des points t pas des segments
Là, pas bien compris
Tu pourrais être un peu plus explicite..

Merci
Commenter la réponse de cs_barbichette
Cirec 4231 Messages postés vendredi 23 juillet 2004Date d'inscription 3 août 2018 Dernière intervention - 20 nov. 2006 à 16:39
0
Merci
PS: il existe aussi une fonction dans Windows.pas qui porte le même nom (FloodFill) et qui n'est pas relié a un canvas :

{$EXTERNALSYM FloodFill}
function FloodFill(DC: HDC; nXStart, nYStart: Integer; crFill: COLORREF): BOOL; stdcall;

je suppose que tu as au moins un HDC

Sinon si tu optes pour la méthode de région il existe aussi ceci :
{$EXTERNALSYM FillRgn}
function FillRgn(DC: HDC; hrgn: HRGN; hbr: HBRUSH): BOOL; stdcall;

elle fonctionne aussi avec un HDC et un HBR qui au final offre bien plus de possibilitées :
remplire la région,  selon un motif, une image, une couleur

 
@+
Cirec

Commenter la réponse de Cirec
cs_barbichette 247 Messages postés lundi 30 octobre 2000Date d'inscription 15 juillet 2013 Dernière intervention - 22 nov. 2006 à 00:08
0
Merci
bon, j'ai trouvé mon bonheur et je l'ai adapté en pascal :

http://www.delphifr.com/code.aspx?ID=40419

merci a tous

barbichette
Commenter la réponse de cs_barbichette

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.