Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.01.2015, 00:59   #1
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
Печаль Наименьшее расстояние между двумя точками

Здравствуйте. Подскажите пожалуйста есть ли готовый алгоритм для поиска самой ближней точки для заданной точки из массива точек?

Есть массив из точек (array of TPoint) которые расположены по эллипсу и есть какая-то условная точка. Нужно вычислить какая точка из массива лежит ближе всего к условной точке.

Вот что сделал я:
Код:
 
	temp_distance:=1000;
	
	//Находим ближнюю точку
	for i:=0 to length(arr_points)-1 do
	  if(sqrt(power((arr_points[i].X-players_points[0].X),2)+power((arr_points[i].Y-players_points[0].Y),2))<temp_distance) then
	   begin
		 temp_distance:=round(sqrt(power((arr_points[i].X-players_points[0].X),2)+power((arr_points[i].Y-players_points[i].Y),2)));
		  player_position:=1+i; 
		end;
Но этот алгоритм дает ошибки.
DarkHacker вне форума Ответить с цитированием
Старый 20.01.2015, 01:05   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Проведите прямую между центром эллипса и этой точкой. Ближайшее пересечение данной прямой с эллипсом - искомая точка.
Arigato вне форума Ответить с цитированием
Старый 20.01.2015, 01:07   #3
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
По умолчанию

Дело в том что фигуры как таковой не существует, есть набор точек которые БЫЛИ на этой фигуре.
DarkHacker вне форума Ответить с цитированием
Старый 20.01.2015, 01:32   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Тогда перебор точек и поиск минимального расстояния до нашей точки.
Arigato вне форума Ответить с цитированием
Старый 20.01.2015, 02:29   #5
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,872
По умолчанию

Цитата:
Сообщение от DarkHacker Посмотреть сообщение
Но этот алгоритм дает ошибки.
Какие ошибки? Секретные?
northener вне форума Ответить с цитированием
Старый 20.01.2015, 02:51   #6
DarkHacker
Форумчанин
 
Аватар для DarkHacker
 
Регистрация: 12.04.2008
Сообщений: 105
По умолчанию

Не правильно рассчитывает минимальное расстояние. Т.е. в ряде случаев все ок, но иногда появляются неточности, точки имеют определенную плотность видимо по этому и возникают неточности. Если тот вариант что я представил является более-менее оптимальным, значит мне следует поработать над входящими данными.
DarkHacker вне форума Ответить с цитированием
Старый 20.01.2015, 03:43   #7
kropotkina-alice
Форумчанин
 
Аватар для kropotkina-alice
 
Регистрация: 27.10.2014
Сообщений: 594
По умолчанию

Цитата:
Сообщение от DarkHacker Посмотреть сообщение
Здравствуйте. Подскажите пожалуйста есть ли готовый алгоритм для поиска самой ближней точки для заданной точки из массива точек?
Полно!
Но их собирают в разделе "Помощь студентам" - они там нужнее...
kropotkina-alice вне форума Ответить с цитированием
Старый 20.01.2015, 06:40   #8
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Цитата:
Подскажите пожалуйста есть ли готовый алгоритм для поиска самой ближней точки для заданной точки из массива точек?
Есть. Уравнение прямой на плоскости называется. 4-й класс среднеобразовательной школы. Эвклидова геометрия.
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder
Smitt&Wesson вне форума Ответить с цитированием
Старый 20.01.2015, 06:57   #9
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Код похож на правду, только отвратительный. Напишите отдельную функцию для расчета расстояний между двумя точками и проходите циклом.
Ошибки могут возникать из-за разницы в системе отсчета. Как правило для строительства эллипса используют свою систему координат. Ваш игрок и эллипс отсчитываются в одном пространстве?
Цитата:
Эвклидова геометрия.
У него и есть квадратичная разница между координатами.
Цитата:
Т.е. в ряде случаев все ок, но иногда появляются неточности, точки имеют определенную плотность видимо по этому и возникают неточности.
Что это значит? Ваши координаты не вещественные? Если влияет погрешность масштабируйте координаты (умножив на 100 например) перед вычислением расстояния.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 20.01.2015 в 07:01.
Utkin вне форума Ответить с цитированием
Старый 20.01.2015, 07:46   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я бы наверное писал так:
Код:
ax:=players_points[0].x;
ay:=players_points[0].Y;
for i:=1 to length(arr_points)-1 do
 with arr_points[i] do
	  if (sqrt(sqr(X-aX)+sqr(Y-aY))<temp_distance) or (i=1) then
	   begin
		 temp_distance:=sqrt(sqr(X-aX)+sqr(Y-aY)));
		  player_position:=i; 
	   еnd;
И переменные все одного типа бы сделал.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расстояние между точками tatiana2472 Помощь студентам 14 02.06.2013 23:22
Создать класс, содержающий методы вычисления расстояние между двумя точками (C# решения нужно оч!) JoyStar Помощь студентам 6 10.12.2012 15:09
Расстояние между точками bumer7721 Помощь студентам 0 22.03.2012 19:16
Рассчитать налог, принадлежность Х к промежутку,расстояние между двумя точками на плоскости,свой возраст на сегодняшний Levon123 Microsoft Office Excel 2 14.06.2011 15:14
СИ Найти наименьшее расстояние между точками savra Помощь студентам 2 19.04.2011 10:16