|
Publicité ' | ||||||||||||||||||||||||
|
|
#21 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Code :
|
||
|
|
00
|
|
|
#22 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
J'obtiens cela:
a2 = 9325 b2 = 133832 c2 = 175012 d2 = 7642 det44 = 0 + (412362320) - (5266563450) + (-222207280) - (-8900297300) --> det44 = 3823888890
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#23 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Ah oui, mais en java les long sont sur 8 octets et en C++ les long sont seulement sur 4 octets, j'ai dépassé les 2 147 483 647 de valeur max...
Comment vais je résoudre ce problème ...(Merci pseudoCode) |
|
|
00
|
|
|
#24 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
Arf ! essaye "long long", ou au pire "float" / "double" ?
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#25 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Merci pseudocode,
je connaissais pas les long long.Bon tout semble rentrer dans l'ordre maintenant |
|
|
00
|
|
|
#26 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Ah oui encore une chose,
Ne faut il pas enlever aussi l'arête symétrique ? Ca me paraitrait logique... |
|
|
00
|
|
|
#27 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
Citation:
Gros oubli dans mon code que je vais aller corriger de ce pas. Merci !
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#28 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : janvier 2007 Messages : 9 651 ![]() |
Citation:
Pour info, j'ai posté le code C ici
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
00
|
|
|
#29 | |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
Citation:
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
|
00
|
|
|
#30 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : janvier 2007 Messages : 9 651 ![]() |
Citation:
![]() ( PS : par contre j'ai réfléchi au handicap que j'avais trouvé, et en fait il est général : dès qu'un triangle est très aplati, la méthode IsInCircle ne suffit pas... J'avais fait un "patch" qui était de vérifier par rapport aux sommets. On pourrait aussi vérifier en prenant le cercle dont le centre est le plus proche du point considéré, ou de rayon le plus petit, ou dont la "corde" est la plus petite... PS2 : toutes les méthodes que j'ai vu se basent sur le fait que l'enveloppe extérieure est convexe. J'avais là aussi développé un "patch" (en utilisant ma méthode d'enveloppe non-convexe) pour des enveloppes concaves, mais je ne sais pas si il existe des méthodes "générales" traitant ce problème..
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
00
|
|
|
#31 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Hello,
Je regarde ça en fin de semaine, histoire de ne pas me mélanger avec mon propre code |
|
|
00
|
|
|
#32 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Code :
if ( p.x<=bbox.minx || p.x>=bbox.maxx || p.y<=bbox.miny || p.y>=bbox.maxy ) {
![]() Sinon encore des problème avec inCircle a (50,90) b (70,50) c (50,10) d (60,30) A vu de nez d est dans le cercle, pourtant ça renvoit faux... ![]() Et je suis passé en double cette fois ci... |
|
|
00
|
|
|
#33 | ||||
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
Citation:
Citation:
Code java :
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
||||
|
00
|
|
|
#34 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Ah ok merci Pseudocode, j'avais pas noté, ça...
|
|
|
00
|
|
|
#35 | ||
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Dans locate :
J'ai modifié comme ça : Code :
Sinon p peut être sur une des 3 arêtes du triangle, pas forcément sur e... |
||
|
|
00
|
|
|
#36 |
![]() ![]() Xavier PhilippeauArchitecte système Inscription : décembre 2006 Messages : 9 840 ![]() |
heu... si tu le dis. J'avoue que je ne vois pas trop où est le problème dans le code original...
![]() locate() renvoie juste l'un des 3 quadedges du triangle contenant le point p. Ou alors je n'ai pas compris le problème.
__________________
ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple. |
|
00
|
|
|
#37 |
|
Nouveau Membre du Club
![]() Inscription : novembre 2008 Messages : 47 ![]() |
Oui, mais c'est pour traiter le cas où le point P est sur l'une des 3 edges du triangle (sur le triangle, pas à l'intérieur strictement). Forcément dans ce cas, tu dois détruire l'edge sur lequel P est tombé. Mais dans ton code tu as 2 chances sur 3 de te tromper
Toi ça ne doit pas t'arriver souvent, mais moi dans mon problème j'ai souvent des points qui doivent tomber pile sur les edges... |
|
|
00
|
|
|
#38 |
|
Invité de passage
![]() Inscription : juillet 2009 Messages : 1 ![]() |
Cela a peut-être été évoqué avant, mais on peut remplacer la ligne
"if (QuadEdge.isOnEdge(e,p)) {" de la fonction insertPoint par "if ((p.x-e.orig().x)*(p.y-e.dest().y)==(p.y-e.orig().y)*(p.x-e.dest().x)){" et supprimer les 3 fonction nommées ci-dessus. J'ai fait des tests avec des 200, 500 et 1000 points aléatoires, et ça a l'air de fonctionner. En plus, cela retire le "d>0.01" La relation ci-dessus signifie que lorsque A, B et C sont sur la même droite, le produit vectoriel de AB et AC vaut zéro. On augmente artificiellement l'espace d'une dimension pour calculer le produit vectoriel, mais on peut fixer la composante z de chaque point à 0. On ne s'intéresse qu'à "B appartient au segment [AC]", par exemple, mais dans notre cas, on peut se contenter de "B est sur la droite (AC)" car locate nous confirme déjà que si "B est sur (AC)" alors il est forcément sur le segment. |
|
|
00
|
|
|
#39 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 2 ![]() |
Bonjour pseudocode,
J'essaie d'utiliser ton algo java pour déterminer la zone la plus proche des villes sur la France. J'ai du l'adapter un peu pour avoir plus de précision donc j'ai passé tous les Point en Point2D.Double et tous les int en double. J'obtiens 2 problèmes : - Le premier, un peu incompréhensible, c'est que sur certains ajouts de points, l'aglo reste indéfiniment bloqué dans l'insertPoint car les valeurs next des QuadEdge rebouclent... - Le 2ème problème, je vais l'illustrer sur les villes du Rhône. Sur ce département, aucun ajout de point ne bloque par contre j'obtiens quelques zones complètement incohérentes puisqu'elles se superposent à d'autres zones correctes. J'ai joint l'image obtenu sous google earth grâce à ma génération. J'ai également joint à ce message le positionnement de mes villes. Pensez vous que le passage en Point2D puisse provoquer ces erreurs ? Est-ce qu'il pourrait y avoir une autre anomalie ? Merci Bastien |
|
|
00
|
|
|
#40 |
|
Invité de passage
![]() Inscription : février 2008 Messages : 2 ![]() |
Rebonjour,
J'avais pas fait attention au dernier poste de Commander Keen et je viens d'ajouter sa modification à l'algo... Et magie, plus de blocage dans la génération et plus d'erreur sur celle-ci non plus! Ha la journée commence bien! Bastien |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com