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?