Il ridimensionamento di un rettangolo, di diverse origini
-
20-09-2019 - |
Domanda
io ho rettangolo, che ha avuto informazioni su topx, Topy, larghezza e altezza.
Voglio scalare questo rettangolo sulla base di un'origine diversa da in alto a sinistra. C'è già esistenti algo di farlo?
Attualmente lavoro su Eclipse GEF & SWT. In GEF, le tutte le operazioni rettangolo si suppone che in alto a sinistra è dove inizia disegno e una scalabilità / ridimensionare da alto a sinistra. Ma io voglio fare scala / ridimensionare dal centro.
ad esempio: il mio rettangolo hanno informazioni come {} 100,100,50,50. Se faccio il ridimensionamento di 1,5 sia in X & Y da in alto a sinistra Prendo il rettangolo risultante come {} 100.100.100.100 (primi due sono x, y e riposo sono larghezza, altezza).
Grazie J
Soluzione
La mia definizione di scala è diversa dalla tua, perché se mi scala di 1,5 dall'alto a sinistra il mio rettangolo risultante sarebbe {100, 100, 75, 75} -> l'origine rimane la stessa e la dimensione di ogni lato si moltiplica dalla scala.
Usando queste definizioni, se (x, y) sono in alto a sinistra coordinate del rettangolo, scaling dal centro e mantenendo l'origine costante: {X, y, larghezza, altezza} -> {x + width * (1 - scala) / 2, y + altezza * (1 - scala) / 2, larghezza * scala, altezza * scala}
Suggerisco scala> 0 anche se il risultato è definito per zero ei valori negativi.
esempio pratico:. Scala {100, 100, 50, 50} per 1,5 dal centro
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
Risultato: {100, 100, 50, 50} -> {87.5, 87.5, 75, 75}
Altri suggerimenti
se il rettangolo è definito da
topx, topy, widht, height
il fattore di scala è
factor
le coordinate di origine sono
ox, oy
è possibile scalare il rettangolo dal origine operata con la seguente formula
topx = ox + ( topx - ox ) * factor;
topy = oy + ( topy - oy ) * factor;
width = width * factor;
height = height * factor;