2010-12-31 3 views
1

Supposons que j'ai une image d'entrée arbitraire avec la largeur w1 et la hauteur h1. Je veux faire pivoter cette image d'environ 360 degrés jusqu'à la position de départ. Cependant, si l'image est de n'importe quoi sauf un cercle, les bords de l'image seront coupés si la toile sur laquelle elle est dessinée reste à la taille w1 par h1.Boîte de délimitation la plus petite possible pour une image pivotée

Figure

Ce que je dois est alors de déterminer la taille de la toile (largeur w2 et la hauteur h2) qui peut être utilisé pour toutes les versions de rotation de l'image d'entrée. Je sais que w2 = h2, et donc la taille de la toile désirée est un carré, car il est évident que nous tournons quelque chose autour d'un point central, et l'image finale (après 360 rotations) est essentiellement un cercle.

L'autre chose à prendre en compte est que les objets tels que les carrés auront des coins qui dépasseront, donc l'utilisation de la valeur maximale de largeur ou de hauteur pour les deux dimensions ne fonctionne pas non plus.

Une solution que je suis venu avec est de créer la plus grande toile que j'ai besoin (par exemple en mettant w2 et h2-max(w1, h1) * 2, tout en rotation, puis couper tous les pixels transparents. Ce n'est pas très efficace et je serais beaucoup mieux en mesure de calculer la zone de délimitation serré dès le départ.

Répondre

3

Ceci est une question de géométrie. Vous voulez essentiellement de trouver le diamètre (d) d'un cercle qui inscrirait votre toile d'origine, puis w2 = h2 = d

Le diamètre d'un tel cercle serait √(w1^2+h1^2)

Alors w2 = h2 = √(w1^2+h1^2)

également , pour éviter l'écrêtage, vous pourriez vouloir prendre le plafond de ce résultat plutôt que d'arrondir.

2

Si l'image en rotation dans un carré, vous auriez à faire la hauteur de la toile et la largeur de la même longueur que l'hypoténuse.

w = h = sqrt (h^2 + w^2)

(Je ne sais pas actionscript)

Toutefois, si l'image que vous avez est pas dans un carré, vous aurez essentiellement de trouver le point le plus éloigné du centre ...

PS: Il est tard et je suis en train de divaguer, alors je suis désolé si cela peut être faux.

1

Votre toile doit être un carré. Si vous allez faire pivoter un corps comme la figure verte autour d'un point (dans cet exemple, point A), le côté du carré est le double de la distance au point le plus éloigné de A dans le corps.

alt text

Questions connexes