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
????
Alors, là, selon les définitions d'un polygone, sommes-nous dedans
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
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 :
Alors, là, selon les définitions d'un polygone, sommes-nous dedans
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 !
l'un des modes est plus complexe que l'autre apres tu peux choisir en fonction de tes besoins l'un ou l'autre !

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

Un jour peut être ...

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
Bon thread

Re: savoir si une coordonnées est dans un polygone
Publié : lun. 20/juin/2011 12:11
par Thyphoon
super !

Merci !!

)
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 )

:
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
