[Gridflow-dev] polygon comparator (fwd)
Mathieu Bouchard
matju at artengine.ca
Sat Oct 7 11:25:57 EDT 2006
Hey, some cool news: there are now four more polygon-related classes in
GridFlow:
[#polygon_each_edge] - outputs N grids of size 2x2 representing each edge
in the polygon which is a grid of size Nx2.
[#polygon_moment] - finds the centroïd of a polygon (without rendering
it).
[#polygon_radial_map] - renders a 1-D panorama from a polygon
[#polygon_comparator] - finds similarities in two polygons using those
panoramas, and finds the optimal rotations for aligning the polygons.
Note that the last of those classes depends on [#fft], so you need
libfftw. None of those classes depend on ltilib.
I developed the technique for comparing polygons by myself, and I'm afraid
that this might be original research...
This supplements the other polygon-related classes,
[#polygon_perimetre]
[#polygon_area]
[#draw_polygon]
[#edit_polygon] (unfinished)
[#draw_rect] (unfinished)
---------- Forwarded message ----------
Date: Sat, 7 Oct 2006 10:57:03 -0400 (EDT)
From: Mathieu Bouchard <matju at artengine.ca>
To: Alexandre Castonguay <acastonguay at artengine.ca>
Cc: heri at artengine.ca
Subject: Re: polygon comparator
On Sat, 7 Oct 2006, Alexandre Castonguay wrote:
> Je viens d'essayer [#polygon_comparator] en passant deux grilles de
> dimensions differentes mais je n'obtiens pas de sortie.
Il faut envoyer le polygon deux fois dans l'inlet de droite. C'est pas supposé,
c'est un bug de séquençage, mais j'ai pas le temps de chercher maintenant.
Ensuite tu peux ouvrir la patch pour voir le data sous forme d'array pd, ou
encore tu peux le prendre sous forme de grid float32 à l'outlet. J'avais pensé
mettre un outlet plus simple avec juste un nombre de 0 à 1 mais je suis pas sûr
de ce que je devrais faire.
Ensuite tu dois savoir qu'il y a une distinction entre les polygones horaires
et anti-horaires (ce n'est pas une caractéristique vraiment du polygone, mais
plutôt de sa liste de points). Le sens est appelé positif ou négatif
dépendemment du signe du résultat de [#polygon_area]. Lequel est le sens
horaire, dépend des axes. Le résultat de [#polygon_radial_map] va être négatif
si tu vas dans le sens négatif. Le résultat de [#polygon_comparator] va être
négatif si le sens des deux polygones est différent.
Ensuite, dans la grille il va y avoir un peak. Tu peux trouver sa hauteur avec
[# abs-] [#fold max]. Si c'est 1, les deux polygones sont égaux. Ça prend des
polygones très différents ou décentrés pour donner des valeurs vraiment basses.
L'endroit où le peak est dans la grille va te donner l'angle de rotation qui
alignerait les deux formes optimalement.
S'il y a plusieurs peaks de même hauteur c'est à cause de symétrie: pour un
triangle équilatéral et un carré ça donne 12 peaks pcq le ppcm de 3 et 4 est
12; ça veut dire qu'il y a 12 rotations possibles qui alignent ces deux formes
optimalement. (Note que pour bien voir il faut zoomer les valeurs pcq elles
sont toutes entre 0.97 et 0.98 pour cet exemple.)
> Est-ce que ce cas est permis? J'essaie de figurer comment l'utiliser.
Oui, les polygones à nombres de sommets différents sont permis, c'était dans
mon design dès le début. [#polygon_radial_map] enlève toute notion de nombre de
sommets lors de sa transformation (qui est une forme de rendering).
On Sat, 7 Oct 2006, Alexandre Castonguay wrote:
> L'as-tu essaye avec les polys que j'ai prepare, et est-ce qu'on a des
> resultats negatifs avec ceux qui ne sont pas des matches et positifs avec les
> autres?
C'est plutôt des résultats proches de 1.0 ou de -1.0 quand les polygones sont
identiques, et des résultats un peu plus loin quand ils ne le sont pas. Ça
prend des polygones très différents pour obtenir des nombres "proches" de 0:
par exemple un très mince avec un très rond.
Note que les polygones doivent avoir leur centroïde = 0 pour être bien
comparables.
_ _ __ ___ _____ ________ _____________ _____________________ ...
| Mathieu Bouchard - tél:+1.514.383.3801 - http://artengine.ca/matju
| Freelance Digital Arts Engineer, Montréal QC Canada
More information about the Gridflow-dev
mailing list