Mise à l'échelle l'arbitraire d'un polygone
J'ai été à récurer l'internet pour les jours, mais ont été incapables de trouver une bonne réponse (ou au moins un qui fait sens pour moi) à ce qui semble comme il devrait être une question commune. Comment fait-on à l'échelle de l'arbitraire d'un polygone? En particulier, les polygones concaves. J'ai besoin d'un algorithme qui permet de traiter concave (certainement) et auto-intersection (si possible) des polygones. L'évident et simple de l'algorithme que j'ai été à l'aide de la poignée de simples polygones convexes est le calcul du centroïde du polygone, de la traduction que le centre de gravité à l'origine, la mise à l'échelle de tous les sommets, et la traduction du polygone à son emplacement d'origine.
Cette approche ne fonctionne pas pour beaucoup (ou peut-être tous) concave de polygones que le centre de gravité tombe souvent à l'extérieur du polygone, de sorte que la mise à l'échelle de l'opération se traduit également dans une traduction et j'ai besoin d'être en mesure à l'échelle du polygone "en place" sans que le résultat final en cours de traduction.
Est une personne au courant d'une méthode de mise à l'échelle concave polygones? Ou peut-être un moyen de trouver le "centre audiovisuel", qui peut être utilisé comme un cadre de référence pour la mise à l'échelle de l'opération?
Juste pour préciser, je suis en train de travailler dans l'espace 2D et je voudrais faire évoluer mes polygones à l'aide de la "visual center" dans le cadre de référence. Alors peut-être une autre façon de poser la question, comment puis-je trouver le centre audiovisuel d'une concave et/ou auto-intersection polygone?
Merci!
Hmm, j'ai essayé d'utiliser le centre d'une zone de délimitation, comme cadre de référence, mais qui a laissé mon résultat traduit également. Aussi essayé de mise à l'échelle de la boîte englobante souhaité par le facteur et en utilisant les bords comme cadres de référence, mais n'a toujours pas se retrouver avec un pur non traduite solution. Avez-vous quelque chose de spécifique à l'esprit que je devrais essayer avec une boîte englobante? Merci pour la réponse!
Ce que je veux dire par centre est le "visuel" de centre du polygone. La meilleure façon que je peux penser de la décrire serait "zoom" sur un polygone, si vous voulez le centre visuel du polygone à rester constante tout au long de la zoom.
Dessiner un polygone concave et l'étiquette de ce que vous entendez par le "centre visuel." Centre visuel n'est pas un terme technique et il n'y a aucun moyen pour nous de savoir ce que tu veux dire par il sans donner une définition précise ou au moins quelques exemples afin que nous puissions en déduire une.
Je voudrais bien, mais je n'ai pas assez de points pour afficher des images.. L'évidence polygone qui montre que le problème est en forme de L polygone. Comme le polygone est mise à l'échelle de la superficie du polygone est également traduit par de plus en plus loin du centre de gravité. Vous ne savez pas comment définir centre visuel autre que peut-être ces images qu'il ne veut pas que je post: Original Polygone et Polygone à l'Échelle en 4X
OriginalL'auteur Craig | 2011-07-26
Vous devez vous connecter pour publier un commentaire.
La raison pour laquelle vous ne pouvez pas trouver une bonne réponse est parce que vous êtes imprécis avec vos exigences. Tout d'abord explicitement définir ce que vous entendez par "en place". Ce qui est maintenue constante?
Une fois que vous avez compris, puis traduire le point constant à l'origine, à l'échelle du polygone comme d'habitude, et de les traduire en arrière.
Pouvez-vous poster quelques images d'un cas où l'utilisation du centre de gravité ne fonctionne pas bien?
OriginalL'auteur tskuzzy
Je ne suis pas sûr de ce que votre problème est.
Vous travaillez dans un espace affine, et vous êtes à la recherche pour une transformation affine à l'échelle de votre polygone ?
Si je suis à droite, il suffit d'écrire la matrice de transformation:
Et de transformer votre polygone avec la matrice
Vous pouvez regarder pour la transformation affine de la matrice.
espère que cela aide
MODIFIER
si vous voulez garder la même "centre", il vous suffit de faire un homotethy de paramètre lambda avec le centre de G = centre de gravité du polygone:
il vérifie :
G ne bougera pas, car il est le centre de la homotethy.
Il sera toujours vérifier le lien ci-dessous, de sorte qu'il sera toujours le centre de gravité. (il vous suffit de multiplier la relation par lambda)
dans votre cas, G est facile à déterminer: G(x,y) : (moyenne des valeurs x de points, la moyenne des valeurs de y de points)
et il doit faire ce dont vous avez besoin
OriginalL'auteur Ricky Bobby
Peut-être Craig est à la recherche d'un "polygone" décalage de l'algorithme où chaque arête du polygone est compensée par une valeur donnée. Par exemple, étant donné une dans le sens des aiguilles orientées polygone, compensation des bords vers la gauche pour augmenter la taille du polygone. Si c'est ce que Craig est à la recherche pour ensuite cela a été demandé et répondu avant ici - Un algorithme pour le gonflage/dégonflage (compensation, de mise en mémoire tampon) de polygones.
Si vous êtes à la recherche d'un prêt (opensource freeware) solution, j'ai aussi créé un écrêtage de la bibliothèque (Clipper) écrit en Delphi, C++ et C# qui comprend un assez simple polygone de compensation de la fonction.
OriginalL'auteur Angus Johnson