2009-12-22 2 views
1

J'ai un rectangle qui contenait des informations sur topx, topy, width et height.Redimensionnement d'un rectangle, d'origines différentes

Je souhaite mettre à l'échelle ce rectangle en fonction d'une origine autre que le coin supérieur gauche. Existe-t-il déjà un algo pour le faire?

Actuellement je travaille sur Eclipse GEF & SWT. Dans GEF, toutes les opérations rectangle sont supposées que le dessin commence en haut à gauche et que l'échelle/le redimensionnement est en haut à gauche. Mais je veux faire l'échelle/redimensionner du centre. Par exemple: mon rectangle a des informations comme {100,100,50,50}. Si je fais une échelle de 1.5 dans les deux x & y en haut à gauche, je vais obtenir le rectangle résultant comme {100,100,100,100} (Les deux premiers sont x, y et le reste sont la largeur, la hauteur).

Merci J

Répondre

0

Ma définition de l'échelle est différente de la vôtre parce que si j'échelle de 1,5 en haut à gauche de mon rectangle résultant serait {100, 100, 75, 75} -> l'origine reste le même et la taille de chaque côté est multipliée par l'échelle. En utilisant ces définitions, si (x, y) sont les coordonnées en haut à gauche du rectangle, en partant du centre et en gardant l'origine constante: {x, y, largeur, hauteur} -> {x + largeur * (échelle 1)/2, y + hauteur * (échelle 1)/2, largeur * échelle, hauteur * échelle}

Je suggère une échelle> 0 bien que le résultat soit défini pour les valeurs zéro et négatives.


Exemple travaillé: Échelle {100, 100, 50, 50} par 1,5 à partir du centre.

x: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5 
y: 100 -> 100 + 50 * (1 - 1.5)/2 = 100 + 50 * (-0.5)/2 = 100 - 50/4 = 87.5 
width: 50 -> 50 * 1.5 = 75 
height: 50 -> 50 * 1.5 = 75 

Résultat: {100, 100, 50, 50} -> {87,5, 87,5, 75, 75}

+0

Je ne pense pas que cela donnera des résultats corrects. Parce que supposons que mon rectangle est {100,100,50,50}. Donc, si je pèse 1,5 à l'origine, il devrait être {87,5,87.5,75,75}. N'est-ce pas? – Jijoy

+0

Correct. C'est ce que la formule vous donne. J'ai ajouté un exemple travaillé pour le démontrer. Le centre des deux rectangles est à 125, 125. – richj

+0

ouais, ma mauvaise. Votre réponse est correcte. Merci – Jijoy

0

si le rectangle est défini par

topx, topy, widht, height

l'échelle facteur est

factor

les coordonnées d'origine sont

ox, oy

vous pouvez redimensionner le rectangle par l'origine donnée par la formule suivante

topx = ox + (topx - ox) * factor; 
topy = oy + (topy - oy) * factor; 
width = width * factor; 
height = height * factor;