Главная страница
    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.48 MB
Время: 0.038 c
15-1154277710
Сатир
2006-07-30 20:41
2006.08.27
Ищуются исходники какого-нить каталога


1-1153251715
Gloomer
2006-07-18 23:41
2006.08.27
Как перекодировать строку из UTF-8 в ANSI?


2-1154673907
Yegorchic
2006-08-04 10:45
2006.08.27
Сравнение двух слов


2-1155037543
1519
2006-08-08 15:45
2006.08.27
SQL


2-1154613448
gdaujk
2006-08-03 17:57
2006.08.27
Выделение памяти для массива в DLL.





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский