Mise à l'échelle d'un polygone arbitraire
Question
J'ai récuré Internet pendant plusieurs jours, mais ont été incapables de trouver une bonne réponse (ou au moins un qui a fait sens pour moi) à ce qui semble comme il devrait être une question commune. Comment peut-on à l'échelle un polygone quelconque? En particulier, concave des polygones. Je besoin d'un algorithme qui peut gérer des polygones concaves (certainement) et auto-intersection (si possible). L'algorithme simple et évident que je l'ai utilisé pour gérer des polygones simples convexes calcule le barycentre du polygone, traduisant que barycentre à l'origine, mise à l'échelle de tous les sommets, et traduisant l'arrière du polygone à son emplacement d'origine.
Cette approche ne fonctionne pas pour beaucoup (ou peut-être tous) des polygones concaves que le barycentre tombe souvent en dehors du polygone, l'opération de mise à l'échelle se traduit également par une traduction et je dois être en mesure à l'échelle du polygone « en place » sans le résultat final en cours de traduction.
Quelqu'un est-il au courant d'une méthode de mise à l'échelle des polygones concaves? Ou peut-être une façon de trouver le « centre visuel » qui peut être utilisé comme cadre de référence pour l'opération de mise à l'échelle?
Juste pour clarifier les choses, je travaille dans l'espace 2D et je voudrais à l'échelle de mes polygones à l'aide du « centre visuel », comme le cadre de référence. Alors peut-être une autre façon de poser la question serait, comment puis-je trouver le centre visuel d'un concave et / ou d'un polygone auto-intersection?
Merci!
La solution
La raison pour laquelle vous ne pouvez pas trouver une bonne réponse est parce que vous êtes imprécis avec vos besoins. Tout d'abord définir explicitement ce que vous entendez par « en place ». Qu'est-ce que est maintenue constante?
Une fois que vous avez compris cela, puis traduire le point constant à l'origine, l'échelle du polygone comme d'habitude, et retraduire.
Autres conseils
Je ne suis pas sûr de ce que votre problème est.
Vous travaillez dans un espace affines, et vous êtes à la recherche d'une transformation affine à l'échelle polygone?
Si je ne me trompe pas, il suffit d'écrire la matrice de transformation:
Et transformer votre polygone avec la matrice
Vous pouvez rechercher pour la matrice de transformation affine.
it helps
EDIT
si vous voulez garder le même « centre », vous pouvez juste faire une homotethy du paramètre lambda avec le centre G = barycentre du polygone:
il vérifie:
G ne se déplace pas, car il est au centre de la homotethy.
Il vérifiera toujours la relation ci-dessous, il sera toujours le barycentre. (Vous suffit de multiplier la relation par lambda)
dans votre cas G est facile à déterminée: G (x, y): (moyenne des valeurs x de points, moyenne des valeurs y des points)
et il doit faire ce que vous avez besoin
Peut-être Craig est à la recherche d'un « polygone décalé » algorithme - où chaque bord du polygone est décalé d'une valeur donnée. Par exemple, étant donné un polygone orienté dans le sens horaire, la compensation des bords vers la gauche augmentera la taille du polygone. Si c'est ce que Craig cherche alors cela a été demandé et répondu avant ici - Clipper ) écrit en Delphi, C ++ et C # qui comprend une fonction de compensation de polygone assez simple.