Frage

ich Rechteck haben, die Informationen hatte über TopX, topy, Breite und Höhe.

Ich möchte dieses Rechteck skalieren, basierend auf einem anderen Ursprung als oben links. Gibt es bereits algo bestehende, das zu tun?

Zur Zeit arbeite ich an Eclipse-GEF & SWT. In GEF werden die alle Rechteck Operationen angenommen, dass oben links ist, wo die Zeichnung beginnt und sie skalieren / Resize von links oben. Aber ich will von der Mitte Skala / Resize tun.

zB: mein Rechteck haben Informationen wie {100,100,50,50}. Wenn ich von 1,5 sowohl x & y von do Skalierung oben links Ich werde das resultierende Rechteck als {100100100100} (Die ersten beiden sind x, y und Rest sind Breite, Höhe) erhalten.

Danke J

War es hilfreich?

Lösung

Meine Definition von Skala unterscheidet sich von Ihnen, denn wenn ich von 1.5 von oben skalieren ließ mein resultierende Rechteck würde {100, 100, 75, 75} -> die Herkunft bleibt gleich und die Größe jeder Seite ist multiplizierten von der Skala.

diese Definitionen verwenden, wenn (x, y) sind die oben links Koordinaten des Rechtecks, von der Mitte der Skalierung und den Ursprung konstant zu halten: {X, y, Breite, Höhe} -> {x + Breite * (1 - Skala) / 2, y + Höhe * (1 - Skala) / 2, Breite * -Skala, Höhe * scale}

Ich schlage vor, Skala> 0, obwohl das Ergebnis für Null und negative Werte definiert ist.


Arbeitete Beispiel:. Maßstab {100, 100, 50, 50} um 1,5 vom Zentrum

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

Ergebnis: {100, 100, 50, 50} -> {87,5, 87,5, 75, 75}

Andere Tipps

, wenn das Rechteck wird durch

topx, topy, widht, height

der Skalierungsfaktor

factor

die Ursprungskoordinaten sind

ox, oy

können Sie das Rechteck mit dem gegebenen Ursprung mit folgenden Formel skalieren

topx   = ox + ( topx - ox ) * factor;
topy   = oy + ( topy - oy ) * factor;
width  = width  * factor;
height = height * factor;
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top