Page 2 sur 2

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

Publié : jeu. 16/juin/2011 20:58
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

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

Publié : jeu. 16/juin/2011 22:10
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 ?

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

Publié : ven. 17/juin/2011 4:44
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

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

Publié : ven. 17/juin/2011 8:10
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.

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

Publié : ven. 17/juin/2011 8:35
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:

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

Publié : lun. 20/juin/2011 10:59
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é

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

Publié : lun. 20/juin/2011 11:54
par djes
Ca, c'est du code 8)
Bon thread :D

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

Publié : lun. 20/juin/2011 12:11
par Thyphoon
super ! :D Merci !! :o)

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

Publié : lun. 20/juin/2011 16:51
par graph100
Il y a un gain de vitesse ? (je peux pas tester là)

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

Publié : lun. 20/juin/2011 18:46
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

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

Publié : lun. 20/juin/2011 19:12
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!

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

Publié : lun. 20/juin/2011 19:14
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é !

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

Publié : lun. 20/juin/2011 19:28
par djes
Oui, il faudrait créer un nouveau sujet ; tu t'en charges?

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

Publié : mar. 21/juin/2011 7:18
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

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

Publié : jeu. 25/août/2011 21:46
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