Показать сообщение отдельно
Старый 28.12.2012, 14:26
djyamato вне форума Посмотреть профиль Отправить личное сообщение для djyamato Посетить домашнюю страницу djyamato Найти все сообщения от djyamato
  № 16  
Ответить с цитированием
djyamato
 
Аватар для djyamato

Регистрация: Feb 2006
Сообщений: 884
Записей в блоге: 2
Отправить сообщение для djyamato с помощью ICQ Отправить сообщение для djyamato с помощью Skype™
Ну, допустим, увеличивать я научился, вполне может быть что этот алгоритм и не ошибется

pm.points - 4 точки красного четырехугольника

Код AS3:
// границы красного спрайта (четырехугольника) внутри сцены
var rect:Rectangle=transformSprite.getRect(FlexGlobals.topLevelApplication.stage);
 
var minHeight:Number=10000;
var minWidth:Number=10000;
 
var widthStartIndex:int;
var heightStartIndex:int;
 
// min height
if(Math.abs(pm.points[0].y-pm.points[3].y)<minHeight)
{
	minHeight=Math.abs(pm.points[0].y-pm.points[3].y);
	heightStartIndex=0;
}
if(Math.abs(pm.points[1].y-pm.points[2].y)<minHeight)
{
	minHeight=Math.abs(pm.points[1].y-pm.points[2].y);
	heightStartIndex=1;
}
if(Math.abs(pm.points[0].y-pm.points[2].y)<minHeight)
{
	minHeight=Math.abs(pm.points[0].y-pm.points[2].y);
	heightStartIndex=0;
}
if(Math.abs(pm.points[1].y-pm.points[3].y)<minHeight)
{
	minHeight=Math.abs(pm.points[1].y-pm.points[3].y);
	heightStartIndex=1;
}
 
// min width
if(Math.abs(pm.points[0].x-pm.points[1].x)<minWidth)
{
	minWidth=Math.abs(pm.points[0].x-pm.points[1].x);
	widthStartIndex=0;
}
if(Math.abs(pm.points[0].x-pm.points[2].x)<minWidth)
{
	minWidth=Math.abs(pm.points[0].x-pm.points[2].x);
	widthStartIndex=2;
}
if(Math.abs(pm.points[3].x-pm.points[2].x)<minWidth)
{
	minWidth=Math.abs(pm.points[3].x-pm.points[2].x);
	widthStartIndex=3;
}
if(Math.abs(pm.points[3].x-pm.points[1].x)<minWidth)
{
	minWidth=Math.abs(pm.points[3].x-pm.points[1].x);
	widthStartIndex=1;
}
 
trace("minWidth",minWidth,"minHeight",minHeight);
trace("widthStartIndex",widthStartIndex,"heightStartIndex",heightStartIndex);
 
var coeffWidth:Number=980/minWidth;
var coeffHeight:Number=540/minHeight;
 
if(coeffWidth>coeffHeight)
{
      coeff=coeffWidth;
}
else
{
	coeff=coeffHeight;
}
 
// позиционирование в лев верх экрана
pm.points[1].x-=rect.x;
pm.points[1].y-=rect.y;
 
pm.points[2].x-=rect.x;
pm.points[2].y-=rect.y;
 
pm.points[3].x-=rect.x;
pm.points[3].y-=rect.y;
 
pm.points[0].x-=rect.x;
pm.points[0].y-=rect.y;
 
// scale
pm.points[0].x=pm.points[0].x*coeff;
pm.points[0].y=pm.points[0].y*coeff;
 
pm.points[1].x=pm.points[1].x*coeff;
pm.points[1].y=pm.points[1].y*coeff;
 
pm.points[2].x=pm.points[2].x*coeff;
pm.points[2].y=pm.points[2].y*coeff;
 
pm.points[3].x=pm.points[3].x*coeff;
pm.points[3].y=pm.points[3].y*coeff;
Но вот как спозиционировать внутри экрана уже увеличенный я не знаю