|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
определить наименьшую дистанцию между Point-ами
Здравствуйте! Ситуация следующая: есть массив с point-ами, и есть функция(отвечающая за нажатие мыши), и еще есть спрайт. Задача: определить ближайшую к нажатию мыши точку, и присваивать спрайту координаты точки. Так вот, при нажатие мыши создается еще одна точка(point) с координатами мыши...и тут я думал перебирать массив узнавая дистанцию, потом дистанции сортировать и брать первую(наименьшую), но возникла проблема - как узнать от какой точки, собственно, эта дистанция...и других путей решения я не вижу. Может кто видит, поделитесь пожалуйста. Спасибо!
Последний раз редактировалось vitamin4er; 12.05.2013 в 21:15. Причина: опечатка |
|
|||||
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
Цитата:
P.S. Если из массива точек выбирать ближайшую к клику мышки, то что тут сложного? |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Цитата:
Добавлено через 3 минуты точнее,присвоить координаты легко! я как раз не могу найти ближайшую точку...если не сложно, опишите вкратце! |
|
|||||
Регистрация: Apr 2013
Сообщений: 77
|
Хранить в веторах:
1. Координату по х. 2. Координату по у. Для всех точек, далее используешь формулу. Расстояние между точками = Корень из ((x1-x2)^2 + (y1-y2)^2) Если нашлось расстояние меньше, чем текущее - присваиваешь это расстояние в минимум, а также обновляешь номер этой точки в Vector'e. Изначально, можешь задать для минимума больше значение, чтобы расстояние минимальное точно было меньше его, допустим 10000000. Всё ясно? |
|
|||||
Banned
[+1 30.08.14]
[+1 26.02.14] Регистрация: Apr 2012
Сообщений: 162
|
Вкратце: сначала диагональ до любого поинта, если равны,то на ваш вкус.
|
|
|||||
Нуб нубам
модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
|
function nearPoint(event:MouseEvent):Point { var mouse:Point = new Point(event.localX, event.localY); var minDistance:Number = Number.MAX_VALUE; var point:Point; for(var i:uint = 0; i < _points.length; i++) { var p:Point = _points[i]; var d:Number = Point.distance(mouse, p); if(minDistance > d) { minDistance = d; point = p; } } return point; }
__________________
Reality.getBounds(this); |
|
|||||
Регистрация: Oct 2012
Сообщений: 191
|
Wolsh, спасибо!
|
|
|||||
Point distance внутри себя содержит извлечение корня, который 'типа' медленный. Я это к тому, что можно сравнивать не извлекая корень:
|
|
|||||
Регистрация: Apr 2013
Сообщений: 77
|
Да, это может привести к неверному ответу.
|
|
|||||
Lorem ipsum
|
Idon'tKnow, неправда.
__________________
Поймай яблоко 2! |
Часовой пояс GMT +4, время: 12:12. |
|
« Предыдущая тема | Следующая тема » |
|
|