Rectangle maximum dans un nuage de points
Bonjour Guesset, :D
Citation:
Envoyé par
Guesset
... Les commandes sont simples (je ne les avais pas rappelées car elles étaient dans le post #47)
Merci pour toutes ces infos qui m'avaient totalement échappé - j'étais un peu bousculé par les circonstances.
Je suis curieux de voir comment tu as pu ramener la solution à un algorithme linéaire.
Citation:
Envoyé par
Guesset
... mais il y a un gros problème de classes : mathématicien vs tekos, repère direct contre repère inverse, repère mathématique contre repère écran :mouarf:
C'est ici secondaire, parce que cela ne change rien aux distances; et le renversement de l'image supprimerait le problème.
Cela serait par contre insupportable en imagerie 3D, où l'intervention d'un repère indirect invalide l'identification gauche/droite (c'était le cas de POV Ray).
Citation:
Envoyé par
Guesset
... Ce n'est pas le même algo que tu as présenté initialement, apparemment tu testes tous les quadruplets de points que tu filtres. Ca fait 215 = 4 millions d'itérations pas trop chargées, ça devrait tourner entre le 0.1 s et 1 s ce qui reste humainement instantané. Je pense que tu pourrais accélérer le traitement de TestL en sortant de la boucle dès que la condition est satisfaite ...
Effectivement, parce que mon idée initiale était totalement erronée: les contraintes imposées su les coordonnées (x, y) ne sont pas indépendantes.
La rapidité de l'exécution tient au taux d'élimination relativement élevé des paires de points; il faudrait voir ce que cela donne pour de plus grandes valeurs de (N). Je reprendrai l'emploi de la fonction TestL.
Salut.
Rectangle maximum dans un nuage de points
Bonsoir :D
@ Guesset: je viens de reprendre l'expression de la fonction booléenne TestL:
Code:
1 2 3 4 5 6 7 8 9 10 11 12
| FUNCTION TestL(K1, K2, L1, L2: Byte; VAR N_: Tab_V): Bool;
VAR m: Byte; Test, Tx, Ty: Bool;
BEGIN
Test:= True; m:= 0;
REPEAT
Inc(m);
Tx:= ((N_[K1].x<N_[m].x) AND (N_[m].x<N_[K2].x));
Ty:= ((N_[L1].y<N_[m].y) AND (N_[m].y<N_[L2].y));
IF (Tx AND Ty) THEN Test:= False
UNTIL ((NOT Test) OR (m = Npoint));
Result:= Test
END; |
Le délai d'inventaire des rectangles est tombé à 6 minutes ... Fantastique !:plusser:
Je ne m'attendais pas à ce que le temps de calcul soit divisé par 6 !
@ aj3309
Citation:
Envoyé par
aj3309
... Malgré tout cet algorithme me plait beaucoup et je voudrais réussir son implémentation en VBA.
Je m'en suis tenu à un algorithme de base ne contenant aucune restriction sur la forme ou les dimensions des rectangles.
Rien n'empêche a priori d'introduire dans la sélection des contraintes supplémentaires; en présence d'une vingtaine de points et compte tenu de la rapidité d'exécution de l'algorithme, cela ne devrait pas poser de problèmes.