Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.05.2013, 21:14
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 1  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Question определить наименьшую дистанцию между Point-ами

Здравствуйте! Ситуация следующая: есть массив с point-ами, и есть функция(отвечающая за нажатие мыши), и еще есть спрайт. Задача: определить ближайшую к нажатию мыши точку, и присваивать спрайту координаты точки. Так вот, при нажатие мыши создается еще одна точка(point) с координатами мыши...и тут я думал перебирать массив узнавая дистанцию, потом дистанции сортировать и брать первую(наименьшую), но возникла проблема - как узнать от какой точки, собственно, эта дистанция...и других путей решения я не вижу. Может кто видит, поделитесь пожалуйста. Спасибо!


Последний раз редактировалось vitamin4er; 12.05.2013 в 21:15. Причина: опечатка
Старый 12.05.2013, 21:18
Koopa вне форума Посмотреть профиль Найти все сообщения от Koopa
  № 2  
Ответить с цитированием
Koopa
Banned
[+1 30.08.14]
[+1 26.02.14]

Регистрация: Apr 2012
Сообщений: 162
Цитата:
Задача: определить ближайшую к нажатию мыши точку, и присваивать спрайту координаты точки.
Можно чуть определенней?

P.S. Если из массива точек выбирать ближайшую к клику мышки, то что тут сложного?

Старый 12.05.2013, 21:25
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 3  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Цитата:
Сообщение от Koopa Посмотреть сообщение
P.S. Если из массива точек выбирать ближайшую к клику мышки, то что тут сложного?
присвоить спрайту координаты этой точки. Может это и очевидно, но я чтот не могу додуматься

Добавлено через 3 минуты
точнее,присвоить координаты легко! я как раз не могу найти ближайшую точку...если не сложно, опишите вкратце!

Старый 12.05.2013, 21:31
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 4  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Хранить в веторах:
1. Координату по х.
2. Координату по у.
Для всех точек, далее используешь формулу. Расстояние между точками = Корень из ((x1-x2)^2 + (y1-y2)^2)
Если нашлось расстояние меньше, чем текущее - присваиваешь это расстояние в минимум, а также обновляешь номер этой точки в Vector'e. Изначально, можешь задать для минимума больше значение, чтобы расстояние минимальное точно было меньше его, допустим 10000000. Всё ясно?

Старый 12.05.2013, 21:33
Koopa вне форума Посмотреть профиль Найти все сообщения от Koopa
  № 5  
Ответить с цитированием
Koopa
Banned
[+1 30.08.14]
[+1 26.02.14]

Регистрация: Apr 2012
Сообщений: 162
Вкратце: сначала диагональ до любого поинта, если равны,то на ваш вкус.

Старый 12.05.2013, 21:41
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 6  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Код AS3:
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);

Старый 12.05.2013, 23:11
vitamin4er вне форума Посмотреть профиль Отправить личное сообщение для vitamin4er Найти все сообщения от vitamin4er
  № 7  
Ответить с цитированием
vitamin4er

Регистрация: Oct 2012
Сообщений: 191
Wolsh, спасибо!

Старый 13.05.2013, 00:23
zuxul вне форума Посмотреть профиль Отправить личное сообщение для zuxul Найти все сообщения от zuxul
  № 8  
Ответить с цитированием
zuxul

Регистрация: Dec 2009
Адрес: 59°13′N, 39°54′E
Сообщений: 445
Записей в блоге: 1
Point distance внутри себя содержит извлечение корня, который 'типа' медленный. Я это к тому, что можно сравнивать не извлекая корень:
Код AS3:
var d:Number = (mouse.x - p.x)*(mouse.x - p.x) + (mouse.y - p.y)*(mouse.y - p.y)

Старый 13.05.2013, 00:59
Idon'tKnow вне форума Посмотреть профиль Отправить личное сообщение для Idon'tKnow Найти все сообщения от Idon'tKnow
  № 9  
Ответить с цитированием
Idon'tKnow

Регистрация: Apr 2013
Сообщений: 77
Да, это может привести к неверному ответу.

Старый 13.05.2013, 02:06
Zebestov вне форума Посмотреть профиль Отправить личное сообщение для Zebestov Посетить домашнюю страницу Zebestov Найти все сообщения от Zebestov
  № 10  
Ответить с цитированием
Zebestov
Lorem ipsum
 
Аватар для Zebestov

модератор форума
Регистрация: May 2001
Адрес: Одесса
Сообщений: 4,869
Записей в блоге: 4
Idon'tKnow, неправда.
__________________
Поймай яблоко 2!

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:12.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:12.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.