| australian incognito |
30.01.2011 20:25 |
Заполнение прямоугольной области квадратными обьектами по диагонали.
Добрый вечер, коллеги. Есть к вам один вопрос.
Представьте, что у меня есть рабочее поле 1280x720. Мне надо заполнить его квадратами 50x50 пикселей по диагонали от сверху-слева до снизу справа так, чтобы между квадратами была граница в 1 пиксель.
Придуманный мной алгоритм далеко не идеален как мне кажется, и выполняет задачу только наполовину. Помогите усовершенствовать его или может у кого есть более простое решение. Буду благодарен любой помощи.
Вот мой код:
Код AS1/AS2:
var i:Number = 0;
var j:Number = 0;
//
var coefX:Number = 51;// смещение по оси X
var coefY:Number = 51;// смещение по оси Y
var rowCoef:Number = 1;// число пикселей-квадратов по диагонали
var x0:Number = 0;// начальная координата Х
var y0:Number = 0;// начальная координата Y
var maxX:Number = 0;// максимальная координата по оси Х
var maxY:Number = 0;// максимальная координата по оси Y
var cordXArr:Array = Array();// массив с координатами Х
var cordYArr:Array = Array();// массив с координатами Y
//
function randColor()
{
if (random(2) == 0)
{
randomCol = 0x19398A;
}
else
{
randomCol = 0x005DAA;
}
return randomCol;
}
//
function newRect(coordX, coordY)
{
d = createEmptyMovieClip("z" + j, this.getNextHighestDepth());
d.beginFill(randColor(),100);
d.moveTo(0,0);
d.lineTo(50,0);
d.lineTo(50,50);
d.lineTo(0,50);
d.lineTo(0,0);
d.endFill();
d._x = coordX;
d._y = coordY;
j++;
}
while (cordXArr.length < 390)
{
if (maxX < 1300)
{
maxX = x0 + coefX * (rowCoef - 1);
}
else
{
maxX = 1300;
}
if (maxY < 750)
{
maxY = y0 + coefY * (rowCoef - 1);
maxY0 = 0;
}
else
{
maxY = 750;
maxY0 += coefY;
}
while (maxX >= 0)
{
cordXArr.push(maxX);
maxX -= coefX;
}
while (maxY0 <= maxY)
{
cordYArr.push(maxY0);
maxY0 += coefY;
}
rowCoef++;
}
//
this.onEnterFrame = function()
{
if (i < cordXArr.length)
{
newRect(cordXArr[i],cordYArr[i]);
i++;
}
else
{
delete this.onEnterFrame;
}
};
Благодаря этому скрипту я заполняю поле только наполовину, дальше все идет плохо. Я понимаю почему это происходит, но не могу сам грамотно расставить ограничения на то, чтобы правильно все работало.
Буду благодарен любым советам.
|