Nach harter Arbeit schaltet mein Gehirn den Dienst ab (es ist 23:40 Uhr in der Türkei)
Ich mache einen Rotationsjob..:
Variablen:
_cx = horizontal center of rect
_cy = vertical center of rect
_cos = cos value of current angle
_sin = sin value of current angle
to rotating any point in this rect :
function getx(x, y)
{
return _cx + _cos * (x - _cx) - _sin * (y - _cy);
}
function gety(x, y)
{
return _cy + _sin * (x - _cx) + _cos * (y - _cy);
}
Ich versuche, die Größe des gegebenen Rechtecks vor dem Rotationsprozess auf die maximale Größe zu ändern, die in die ursprünglichen Grenzen passt. wie könnte ich das tun?
danke im Voraus
EDIT: Die Lösung von Igor Krivokon
Das Problem wurde von Igor Krivokon gelöst, und hier ist die modifizierte Version dieser Lösung, die für jeden Winkelwert funktioniert
var h1:Number, h2:Number, hh:Number, ww:Number,
degt:Number, d2r:Number, r2d:Number, deg:Number,
sint:Number, cost:Number;
//@angle = given angle in radians
//@r is source/target rectangle
//@d2r is static PI / 180 constant for degree -> radian conversation
//@r2d is static 180 / PI constant for radian -> degree conversation
d2r = 0.017453292519943295769236907683141;
r2d = 57.295779513082320876798154814105;
deg = Math.abs(angle * r2d) % 360;
if(deg < 91)
{
degt = angle;
}else if(deg < 181){
degt = (180 - deg) * d2r;
}else if(deg < 271){
degt = (deg - 180) * d2r;
}else{
degt = (360 - deg) * d2r;
}
sint = Math.sin(degt);
cost = Math.cos(degt);
h1 = r.height * r.height / (r.width * sint + r.height * cost);
h2 = r.height * r.width / (r.width * cost + r.height * sint);
hh = Math.min(h1, h2);
ww = hh * r.width / r.height;
r.x = (r.width - ww) * .5;
r.y = (r.height - hh) * .5;
r.height = hh;
r.width = ww;
Danke
0 Stimmen
Kurze Erläuterung: Sie haben ein Rechteck R und möchten es um seinen Mittelpunkt drehen und skalieren, um ein Rechteck R' zu erzeugen, das einen möglichst großen Teil der Fläche in R einnimmt?
0 Stimmen
Hallo Tolgahan, Sie können diese Frage nicht beantworten, ohne zumindest das Verhältnis zwischen den Seiten des Rechtecks zu kennen.
0 Stimmen
Ja, und ich möchte R' vor dem Drehen haben
0 Stimmen
@tekBlues : Hallo, wir haben alle Informationen über das Rechteck und die Drehung, d.h. links, oben, rechts, unten und den Winkel, also haben wir Breite und Höhe
2 Stimmen
23:40 Uhr in der Türkei? Sie sollten aus der Türkei wegziehen, dorthin, wo es früher ist.
0 Stimmen
@Nosredna: ich denke schon :), jetzt 12:43 Uhr (00:43)