21 декабря 2011 г.

Как ограничить вектор движения пределами одной ячейки на карте...

package
{
import flash.display.Sprite;
import flash.geom.Point;

public class GeomTest extends Sprite
{
public var cell:Sprite = new Sprite();
public var cellWH:Number = 100; // размер клетки

public function GeomTest()
{
cell.x = cellWH*2;
cell.y = cellWH*2;
cell.graphics.beginFill(0x0000ff);
cell.graphics.drawRect(-cellWH,-cellWH,cellWH*2,cellWH*2);
cell.graphics.beginFill(0xff0000);
cell.graphics.drawCircle(0,0,1);
this.addChild(cell);

//придумываем точку
var movingVector:Point = new Point(Math.random()-0.5,Math.random()-0.5)
movingVector.normalize(10+Math.random()*cellWH*2)
cell.graphics.drawCircle(movingVector.x,movingVector.y,2);

//получаем модуль максимальной координаты
var maxXYabs:Number = Math.max(Math.abs(movingVector.x),Math.abs(movingVector.y));
// удлиняем (укорачиваем) на отношение к размеру клетки
movingVector.normalize(movingVector.length*(cellWH/maxXYabs));


//любуемся
cell.graphics.drawCircle(movingVector.x,movingVector.y,4);

}
}
}



если нужно только удлинять или укорачивать вектор - ставим условие на cellWH/maxXYabs >||< 1