после тяжелой работы мой мозг выходит из строя .. (в 11:40 вечера в Турции)
Я выполняю ротационную работу.
переменные:
_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);
}
Я пытаюсь изменить размер данного прямоугольника до поворота до максимального размера, который помещается в исходных границах ... как я могу это сделать?
спасибо за ваше продвижение
РЕДАКТИРОВАТЬ: решение Игоря Кривокона
Проблема решена Игорем Кривоконом, и вот модифицированная версия этого решения, которая работает для каждого значения угла
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;
Спасибо