Richtig skalieren
Verfasst: 01.10.2010, 10:23
Hallo,
ich komme einfach nicht weiter...
Ich habe zwei Rechtecke. Das eine (Rect1) ist ein BoundingRect und das zweite (Rect2) ist ein Windows-Fenster.
Nun meine Frage:
Wie bekomme ich den Skalierungsfaktor heraus? Also das Rect1 soll nur vergößert/verkleinert werden, das Seitenverhältnis soll gleich bleiben.
Ich gehe im Moment wie folgt vor (etwas Pseudocode, hoffe er ist aussagend):
Wie man sieht, die neue Dimension passt "perfekt" in der Höhe in das Fenster.
Aber die Breite.... sie ist zu Groß!
Ich könnte jetzt noch einen neuen ScaleFaktor berechnen, also sowas wie:
Aber irgendwie bin ich damit nicht zufrieden....
Gibt es einen direkteren Weg?
ich komme einfach nicht weiter...
Ich habe zwei Rechtecke. Das eine (Rect1) ist ein BoundingRect und das zweite (Rect2) ist ein Windows-Fenster.
Nun meine Frage:
Wie bekomme ich den Skalierungsfaktor heraus? Also das Rect1 soll nur vergößert/verkleinert werden, das Seitenverhältnis soll gleich bleiben.
Ich gehe im Moment wie folgt vor (etwas Pseudocode, hoffe er ist aussagend):
Code: Alles auswählen
float w(mBoundingRect->mMax.getX() - mBoundingRect->mMin.getX()); //TestDaten: w=11
float h(mBoundingRect->mMax.getY() - mBoundingRect->mMin.getY()); //TestDaten: h=27
//TestDaten: widgetSize.width == 116; widgetSize.height == 564
Rechteck widgetRect(Punkt2dBild(0,0),Punkt2dBild(widgetSize.width()-1,widgetSize.height()-1));
float scale(0.0f);
if(h>=w) //
scale=(h/widgetSize.height());
else
scale=(w/widgetSize.width());
Rechteck testNeueDimension(Punkt2dBild(0,0),Punkt2dBild(w/scale,h/scale));
//testNeueDimension.width == 239.933;
//testNeueDimension.height == 564.999;
Aber die Breite.... sie ist zu Groß!
Ich könnte jetzt noch einen neuen ScaleFaktor berechnen, also sowas wie:
Code: Alles auswählen
scaleNew = testNeueDimension.width/widgetSize.width();
testNeueDimension.width = Punkt2dBild(testNeueDimension.width/scale);
testNeueDimension.height = Punkt2dBild(testNeueDimension.height /scale);
Aber irgendwie bin ich damit nicht zufrieden....
Gibt es einen direkteren Weg?