Redimensionnement un rectangle, de différentes origines
-
20-09-2019 - |
Question
J'ai rectangle, qui avait des informations sur TopX, topy, largeur et hauteur.
Je veux à l'échelle de ce rectangle à partir d'une origine autre que supérieur gauche. Y at-il algo déjà existant pour le faire?
Actuellement, je travaille sur Eclipse FEM et SWT. Dans FEM, on suppose que le haut-gauche est l'endroit où le dessin commence et ils échelle / redimensionner de haut à gauche les toutes les opérations du rectangle. Mais je veux faire échelle / redimensionner du centre.
ex: mon rectangle ont des informations comme {} 100,100,50,50. Si je mise à l'échelle de 1,5 dans les deux x et y du haut gauche, je vais le rectangle résultant comme {} 100100100100 (les deux premiers sont x, y et repos sont la largeur, hauteur).
Merci J
La solution
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é par l'échelle.
L'utilisation de ces définitions, si (x, y) sont les meilleurs coordonnées gauche du rectangle, mise à l'échelle à partir du centre et de maintien de l'origine constante: {X, y, largeur, hauteur} -> {x + largeur * (1 - échelle) / 2, y + hauteur * (1 - échelle) / 2, largeur * échelle, la hauteur * échelle}
Je suggère l'échelle> 0 même si le résultat est défini pour zéro et les valeurs négatives.
Exemple de travail:. Échelle {100, 100, 50, 50} par 1,5 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}
Autres conseils
si le rectangle est défini par
topx, topy, widht, height
le facteur d'échelle est
factor
les coordonnées d'origine sont
ox, oy
vous pouvez redimensionner le rectangle par l'origine donnée avec la formule suivante
topx = ox + ( topx - ox ) * factor;
topy = oy + ( topy - oy ) * factor;
width = width * factor;
height = height * factor;