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

È stato utile?

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;
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top