![]() |
|
||||||||||
|
|||||
|
Регистрация: Apr 2009
Сообщений: 409
|
Вот рабочий вариант кода, по предложению gloomyBrain
для realTime расчета конечно плохо подходит, но для статики самое то. Ёлочкин вариант, так же упирается в количество выпущенных лучшей из точки, так что решил не экономить на спичках. function minDistance(point:Point,figure:DisplayObject):Point{ var bmp:BitmapData=new BitmapData(figure.width,figure.height,true,0xffffff); var minDist:int=int.MAX_VALUE; var endPoint:Point=new Point(); bmp.draw(figure); for (var _x:int=0;_x<bmp.width;_x++) for (var _y:int=0;_y<bmp.height;_y++) if((bmp.getPixel32(_x,_y)>> 24 & 0xFF).toString(16)=='ff'){ var curDist:int=Math.sqrt(Math.pow(figure.x+_x - point.x, 2) + Math.pow(figure.y+_y - point.y, 2)); if (minDist>curDist) {minDist=curDist; endPoint.x=figure.x+_x; endPoint.y=figure.y+_y;} } return endPoint; } |
|
|||||
|
Регистрация: Jan 2013
Сообщений: 322
|
faraday,
var point:Point = new Point(400, 400); var endPoint:Point = new Point(); var minSqLen:Number = Infinity; var vector:Vector.<uint> = bmd.getVector(bmd.rect); var len:uint = vector.length; var width:uint = bmd.width; for (var i:uint = 0; i < len; i++) { if(vector[i] > 0x00FFFFFF){ var x:uint = i % width; var y:uint = i / width | 0; var sqLen:Number = (point.x - x) * (point.x - x) + (point.y - y) * (point.y - y); if(minSqLen > sqLen){ minSqLen = sqLen; endPoint.setTo(x, y); } } } |
![]() |
![]() |
Часовой пояс GMT +4, время: 04:58. |
|
|
« Предыдущая тема | Следующая тема » |
| Опции темы | |
| Опции просмотра | |
|
|