Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Вниз

SearchingPoint   Найти похожие ветки 

 
FASe   (2006-08-09 15:04) [0]

Здравствуйте. Подскажите (или поправьте мой) алгоритм поиска ближайшей точки. Т.е. есть массив точек Point: TPoint;
Нужно взять некую точку из массива и найти самую ближнюю к ней, я делаю так, но невсегда правильно находит.

var
Point: array of TPoint;

function FindPoint(const NP: Integer): Integer;
var X, Y, N, FoundN: Integer;
begin
 X:=Width; Y:=Height; Result:=-1;
 for N:=HIGH(Point) downto 0 do begin
  if (N<>NP) and ((ABS(Point[NP].X-Point[N].X)<X) and (ABS(Point[NP].Y-Point[N].Y)<Y)) then begin
   X:=ABS(Point[NP].X-Point[N].X);
   Y:=ABS(Point[NP].Y-Point[N].Y);
   Result:=N;
  end;
 end;
end;

procedure ButtonClick(Send...);
var N, FN: Integer;
begin
 SetLength(Point, 100);
 for N:=0 to 100 do begin
  Point[N].X:=Random(Width);
  Point[N].Y:=Random(Height);
 end;
 FN:=FindPoint(30);
 if FN>=0 then ShowMessage(Format("У точки с № %d самая ближняя точка с № %d",[30, FN])
  else ShowMessage("Не найдено");
end;


 
Сергей М. ©   (2006-08-09 15:08) [1]

Есть такая наука - геометрия ..

Знаком с ней хоть немного ?


 
MBo ©   (2006-08-09 15:10) [2]

по теореме Пифагора:

MinDistSqr := 10e12;
...
NewDist := Sqr(Point[NP].X-Point[N].X) + Sqr(Point[NP].Y-Point[N].Y);
if NewDist <  MinDistSqr then begin
 MinDistSqr := NewDist;
 Result := N;
end;


 
FASe   (2006-08-09 15:28) [3]


> Сергей М. ©   (09.08.06 15:08) [1]

Если бы был достаточно хорошо знаком, то сдесь не спрашивал бы.


> MBo ©   (09.08.06 15:10) [2]

Спасибо попробую, а ABS надо делать или без него вычислит?
т.е. NewDist := Sqr(ABS(Point[NP].X-Point[N].X)) + Sqr(ABS(Point[NP].Y-Point[N].Y));
?


 
Сергей М. ©   (2006-08-09 15:31) [4]


> Если бы был достаточно хорошо знаком, то сдесь не спрашивал
> бы


Это же сведения из курса тригонометрии начальной школы) ... Не приходилось ее посещать разве ?)


 
novill ©   (2006-08-09 15:32) [5]

Есть еще такая наука алгебра.

Не встречалась?

Зачем брать модуль от мисла возводимого в квадрат?????


 
FASe   (2006-08-09 15:47) [6]


> Сергей М. ©   (09.08.06 15:31) [4]
> из курса тригонометрии начальной школы)... Не приходилось ее посещать разве ?)

Приходилось.... только давно это было... подзабыл все. :((


> novill ©   (09.08.06 15:32) [5]
> Есть еще такая наука алгебра.
>
> Не встречалась?
>
> Зачем брать модуль от числа возводимого в квадрат?????

Есть альтернатива? Можно поподробней....
Блин и алгебру забываю.... :((
Спасибо.


 
novill ©   (2006-08-09 15:53) [7]

Хмм, вроде не первое апреля. :-|

Попробуй перемножить лубое вещественное число само на себя и получить отрицательное число.


 
Сергей М. ©   (2006-08-09 15:57) [8]


> только давно это было... подзабыл все


Неужели забыл и азы - квадрат гипотенузы равен сумме квадратов катетов ?!)


 
Leonid Troyanovsky ©   (2006-08-09 18:49) [9]


> FASe   (09.08.06 15:28) [3]

> Спасибо попробую, а ABS надо делать или без него вычислит?


Это зависит от метрического пространства, в котором оные
точки расположены.
Для евклидова - метрика квадратичная, т.е. см, например [2].

Как зовут пр-во с метрикой abs даже и не вспомню :)
См. также топология, функциональный анализ &etc

--
Regards, LVT.


 
FASe   (2006-08-09 18:56) [10]

> [8] Сергей М. ©   (09.08.06 15:57)

К большому сожалению ДА. :(
Для меня, в принципе, всегда тяжела была геометрия... А тут столько лет...
Вообще все забыл.

> [7] novill ©   (09.08.06 15:53)

В чем прикол?...
Извеняюсь, может не совсем понял...
А типа -2.345 х 3.564= -8,35758 или не так?
Да это и не по теме вроде бы.
СПАСИБО и на этом, сейчас попробую то, что, предложил MBo (09.08.06 15:10)
Отдельное спасибо MBo.


 
FASe   (2006-08-09 20:07) [11]

> [7] novill ©   (09.08.06 15:53)

Извеняюсь, невнимательно прочитал...Ну расстреляйте меня за это...:)
SQR - это же квадрат числа...
Усек. Спасибо большое, с Вашими намеками вкурил в чем дело.

> [9] Leonid Troyanovsky ©   (09.08.06 18:49)

Да, спасибо, способ от MBo решил проблему.
Сенькс всем откликнувшимся.


 
FASe   (2006-08-09 20:10) [12]

> [9] Leonid Troyanovsky ©   (09.08.06 18:49)


> Это зависит от метрического пространства, в котором оные
> точки расположены.
> Для евклидова - метрика квадратичная, т.е. см, например
> [2].

Блин, это прямо матом для меня ругаетесь. :)))
Как все запущено.... у меня имею ввиду.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2006.08.27;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.048 c
11-1131652752
Flea
2005-11-10 22:59
2006.08.27
MHFindReplaceDialog


15-1154075759
Separator
2006-07-28 12:35
2006.08.27
Посоветуйте почтовый сервер под Windows


2-1155029207
Ega23
2006-08-08 13:26
2006.08.27
DBGridEh - TitleFont для нескольких колонок


2-1154996217
Василич
2006-08-08 04:16
2006.08.27
Очистить БД через запрос SQL


15-1154262709
Alral
2006-07-30 16:31
2006.08.27
Коммандная строка





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский