savoir si une coordonnées est dans un polygone

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: savoir si une coordonnées est dans un polygone

Message par GallyHC »

Je te propose que tu le mettes sur mon site ou je fait comme pour le code des GIFs je le met et je precise d'ou il viens et la personne qui l'a fait a toi de voir. Le site est "http://www.koakdesign.info/?url=04", mais je prepare une nouvelle version de mon site a l'adresse "http://www.koakdesign.info/news".

Sa me prend du temps et j'en ai deja pas mal perdu a cause du taff :) mais la nouvelle version finira par sortir un jour :)

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: savoir si une coordonnées est dans un polygone

Message par graph100 »

Image

????

Alors, là, selon les définitions d'un polygone, sommes-nous dedans :mrgreen:
Apparemment, lorsque des zones se superposent, on sort du polygone, es-ce normal ?
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: savoir si une coordonnées est dans un polygone

Message par Thyphoon »

GallyHC a écrit :Je te propose que tu le mettes sur mon site. Le site est "http://www.koakdesign.info/?url=04"
Voilà c'est fait mais j'ai pas pu précisé que le code avait été développé part avec PB 4.60B
ton site est très bien. dobro avait mis de côté aussi des codes sur son forum a une époque.
Moi j'avais l'idée de faire "un jour" une application lié a l'éditeur qui serait synchronisé avec un serveur avec ce genre de source, mais avec le code source pour toute les versions de PB si possible et compilable en un clic !
graph100 a écrit :Image
Alors, là, selon les définitions d'un polygone, sommes-nous dedans :mrgreen:
Apparemment, lorsque des zones se superposent, on sort du polygone, es-ce normal ?
selectionne le mode Winding number avec Tab et ça devrait être bon ! :mrgreen:
l'un des modes est plus complexe que l'autre apres tu peux choisir en fonction de tes besoins l'un ou l'autre ! :P
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: savoir si une coordonnées est dans un polygone

Message par djes »

Thyphoon a écrit :Moi j'avais l'idée de faire "un jour" une application lié a l'éditeur qui serait synchronisé avec un serveur avec ce genre de source, mais avec le code source pour toute les versions de PB si possible et compilable en un clic !
C'est une excellente idée! Malheureusement, même si les sites des uns et des autres sont très biens (j'en ai un moi-même!), on n'est pas à l'abri d'un accident. C'est pour ça que j'ai tendance à privilégier le forum, d'autant que je le visite tous les jours. Pour un tel outil, il vaudrait peut-être mieux stocker tous les sources dans un espace partagé par tout le monde, avec quelques administrateurs volontaires : genre google code, ou free, en disant dès le départ que cet espace nous appartient à tous, membres de la communauté purebasic.
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: savoir si une coordonnées est dans un polygone

Message par Thyphoon »

djes a écrit :
Thyphoon a écrit :Moi j'avais l'idée de faire "un jour" une application lié a l'éditeur qui serait synchronisé avec un serveur avec ce genre de source, mais avec le code source pour toute les versions de PB si possible et compilable en un clic !
C'est une excellente idée! Malheureusement, même si les sites des uns et des autres sont très biens (j'en ai un moi-même!), on n'est pas à l'abri d'un accident. C'est pour ça que j'ai tendance à privilégier le forum, d'autant que je le visite tous les jours. Pour un tel outil, il vaudrait peut-être mieux stocker tous les sources dans un espace partagé par tout le monde, avec quelques administrateurs volontaires : genre google code, ou free, en disant dès le départ que cet espace nous appartient à tous, membres de la communauté purebasic.
Je suis tout a fait d'accord avec toi ! le site perso n'est pas la solution, faut trouver quelques choses de communautaire. Je pense qu'il y a là un projet très intéressant ... le problème c'est comme tout...trouver le temps :P Un jour peut être ... :mrgreen:
Demivec
Messages : 91
Inscription : sam. 18/sept./2010 18:13

Re: savoir si une coordonnées est dans un polygone

Message par Demivec »

Code Grand!

Voici une version simplifiée de cn_PnPoly() qui utilise le Crossing Number, appelé cn_inPoly().

Code : Tout sélectionner

;http://www.visibone.com/inpoly/
Procedure cn_inPoly(*p.POINT, List poly.POINT())
  Protected.POINT new, old, lp, rp, *poly
  Protected i, inside
  If ListSize(poly()) < 3: ProcedureReturn 0: EndIf 
  *poly = @poly() ;PushListPosition(poly())
  LastElement(poly()): old = poly()
  ForEach poly()
    ;find leftmost endpoint 'lp' and the rightmost endpoint 'rp' based on x value
    If poly()\x > old\x 
      lp = old
      rp = poly()
    Else
      lp = poly()
      rp = old
    EndIf 
    If lp\x < *p\x And *p\x <= rp\x And (*p\y - lp\y) * (rp\x - lp\x) < (rp\y - lp\y) * (*p\x - lp\x)
      inside = ~inside
    EndIf 
    old = poly()
  Next 
  ChangeCurrentElement(poly(), *poly) ;PopListPosition(poly())
  ProcedureReturn inside & 1
EndProcedure
@Edit: le code révisé
Dernière modification par Demivec le lun. 20/juin/2011 12:24, modifié 1 fois.
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: savoir si une coordonnées est dans un polygone

Message par djes »

Ca, c'est du code 8)
Bon thread :D
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: savoir si une coordonnées est dans un polygone

Message par Thyphoon »

super ! :D Merci !! :o)
Avatar de l’utilisateur
graph100
Messages : 1318
Inscription : sam. 21/mai/2005 17:50

Re: savoir si une coordonnées est dans un polygone

Message par graph100 »

Il y a un gain de vitesse ? (je peux pas tester là)
_________________________________________________
Mon site : CeriseCode (Attention Chantier perpétuel ;))
Avatar de l’utilisateur
GallyHC
Messages : 1708
Inscription : lun. 17/déc./2007 12:44

Re: savoir si une coordonnées est dans un polygone

Message par GallyHC »

Bonjour,
djes a écrit :
Thyphoon a écrit :Moi j'avais l'idée de faire "un jour" une application lié a l'éditeur qui serait synchronisé avec un serveur avec ce genre de source, mais avec le code source pour toute les versions de PB si possible et compilable en un clic !
C'est une excellente idée! Malheureusement, même si les sites des uns et des autres sont très biens (j'en ai un moi-même!), on n'est pas à l'abri d'un accident. C'est pour ça que j'ai tendance à privilégier le forum, d'autant que je le visite tous les jours. Pour un tel outil, il vaudrait peut-être mieux stocker tous les sources dans un espace partagé par tout le monde, avec quelques administrateurs volontaires : genre google code, ou free, en disant dès le départ que cet espace nous appartient à tous, membres de la communauté purebasic.
je suis partant pour une realisation communautaire a la française et j'ai deja des outils prets (genre mon parser de code pb). Apres faut juste quelque dev pret a si mettre et des personne motivé pour etre adm et modo...

Après Djes tu parles d'accident lolll le seul accident et que ce qui essais le plus ce decourage lol

Cordialement,
GallyHC
Configuration : Tower: Windows 10 (Processeur: i7 "x64") (Mémoire: 16Go) (GeForce GTX 760 - 2Go) - PureBasic 5.72 (x86 et x64)
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: savoir si une coordonnées est dans un polygone

Message par djes »

C'est cool, ça ne m'étonne pas de ta part. Sinon, quand je parlais d'accident, je parlais aussi de vrais accidents. On a perdu un membre il y a quelques années dans un accident de moto, et peut-être d'autres dont on n'a rien su. Ça peut arriver!
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: savoir si une coordonnées est dans un polygone

Message par Thyphoon »

moi je suis prêt a m'investir ! peut être serait il intéressant d'en parler via messagerie instantané ou (mais je pense que ça sera plus lent) via un autre sujet du forum, histoire de partager les idées et la faisabilité !
Avatar de l’utilisateur
djes
Messages : 4252
Inscription : ven. 11/févr./2005 17:34
Localisation : Arras, France

Re: savoir si une coordonnées est dans un polygone

Message par djes »

Oui, il faudrait créer un nouveau sujet ; tu t'en charges?
Avatar de l’utilisateur
Thyphoon
Messages : 2706
Inscription : mer. 25/août/2004 6:31
Localisation : Eragny
Contact :

Re: savoir si une coordonnées est dans un polygone

Message par Thyphoon »

djes a écrit :Oui, il faudrait créer un nouveau sujet ; tu t'en charges?
Bon j'ai créer un nouveau sujet ! j’espère que ça ira
http://www.purebasic.fr/french/viewtopi ... =4&t=12008
Syntax.error
Messages : 8
Inscription : mer. 13/juil./2011 16:42

Re: savoir si une coordonnées est dans un polygone

Message par Syntax.error »

Bonsoir,

Merci d'avoir porté ces fonctions !
J'ai gardé le topic sous le coude en attendant que le besoin se présente.. C'était cette nuit.

Version conforme à mes habitudes d'écriture ( et macros ) :mrgreen: :

Code : Tout sélectionner

Macro Coo_Segment( Pa, Pb, Liste )
  
  *Situation = @Liste 

  Pa = Liste : If NextElement( Liste ) = 0 : FirstElement( Liste ) : EndIf 
  Pb = Liste : ChangeCurrentElement( Liste, *Situation ) 

EndMacro



Procedure cn_PnPoly( *P.point , List Polylist.point() )

  Define pa.point, pb.point, cn.l
 
  ForEach Polylist() : Coo_Segment( Pa, Pb, Polylist() ) 
  
    If (((pa\y <= *P\y) And (pb\y > *P\y))  Or ((pa\y > *P\y) And (pb\y <= *P\y))) ; an upward crossing Or // a downward crossing
      ; compute the actual edge-ray intersect x-coordinate
      vt.f = (*P\y - pa\y) / (pb\y - pa\y);
      If (*P\x < pa\x + vt * (pb\x - pa\x)) ; *P\x < intersect
        cn+1;   ; a valid crossing of y=*P\y right of *P\x
      EndIf
    EndIf 
 
  Next
  
  ProcedureReturn (cn&1);    // 0 if even (out), and 1 if odd (in)
EndProcedure

Les macros font beaucoup de bien pour alléger visuellement le code, lors de manips sur linkedlist :D
Répondre