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!

Était-ce utile?

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:
entrer image description ici

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top