Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.31;
Скачать: CL | DM;

Вниз

Опять геометрия   Найти похожие ветки 

 
VolanD666   (2005-04-11 14:27) [0]

Привет, программеры. Кто знает, как найти расстояние от точки до ОТРЕЗКА?


 
A22 ©   (2005-04-11 14:47) [1]

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


 
VolanD666   (2005-04-11 15:25) [2]

Не...Мне надо посчитать, учитывая что отрезок конечный.


 
A22 ©   (2005-04-11 15:34) [3]

строй по концам отрезка прямую, ищи перпендикуляр. если он вне отрезка - бери тот конец отрезка, что ближе к точке пересечения перпендикуляра с прямой


 
VolanD666   (2005-04-11 16:11) [4]

А как узнать, вне отрезка или нет?


 
A22 ©   (2005-04-11 16:49) [5]

p = a*(1-t) + b*t
a & t - концы отрезка, p - точка, лежащаю внутри отрезка при t [0,1]. подставляешь значения, считаешь t. если < 0 или > 1 - значит вышли за границы отрезка. соотв. если < 0 - бери за ближайшую точку a, если > 1 - b, иначе - p. а расстоянием от твоей начальной точки P до отрезка будет длина вектора P-P"
(где P" как раз a,b или p)


 
A22 ©   (2005-04-11 16:50) [6]

блин, a и b - концы отрезка, t - коэффициент. очепятался в самом начале, извиняюсь


 
VolanD666   (2005-04-11 18:18) [7]

Ага, спасибо :-)


 
Sapersky   (2005-04-11 18:33) [8]

На будущее -

http://www.geometryalgorithms.com/algorithm_archive.htm


 
VolanD666   (2005-04-11 19:00) [9]


> p - точка, лежащаю внутри отрезка

Тогда, как понять p = a*(1-t) + b*t;


 
Перпендикуляр   (2005-04-12 02:43) [10]

Скажите, а по какой формуле находится перпендикулят точки на отрезок ? В 3D. Желательно в GLScene ?


 
VolanD666   (2005-04-12 16:10) [11]

Можно найти его формулу:
(y-y1)=(-1/a)*(x-x1);
x1,y1- координаты точки
а- берется из уравнения прямой(y=ax+b)


 
VolanD666   (2005-04-12 18:38) [12]

Стоп! Я так с этим уравнением не понял (p = a*(1-t) + b*t).
Пусть есть отрезок (x1,y1,x2,y2). И точка p(px1,px2). Тгда как будет выглядеть это уравнение?


 
Pa5ha   (2005-04-12 20:04) [13]

Короче. Была у нас аналка (аналитическая геометрия то бишь) в первом семестре. Там все это было. Я даже сам удивлялся. Так что студенты первокурсники Тебе помогут. А я уже сдал и забыл. =)


 
Перпендикуляр   (2005-04-13 02:18) [14]


> Pa5ha   (12.04.05 20:04) [13]
> Короче. Была у нас аналка (аналитическая геометрия то бишь)
> в первом семестре. Там все это было. Я даже сам удивлялся.
> Так что студенты первокурсники Тебе помогут. А я уже сдал
> и забыл. =)

Вот и я забыл. Ищу того, ко найдёт перпендикуляр из точки на прямую !


 
XProger ©   (2005-04-13 14:40) [15]

Расстояние от точки M до отрезка AB

var
AM, BM : TPoint;
Rast   : single;
AX, BX : integer;
begin
AM.X := A.X - M.X;
AM.Y := A.Y - M.Y;
BM.X := B.X - M.X;
BM.Y := B.Y - M.Y;
AX := sqr(AM.X) + sqr(AM.Y);
BX := sqr(BM.X) + sqr(BM.Y);
Rast := sqr(B.X - A.X) + sqr(B.Y - A.Y);
if not((AX + Rast > BX) and (BX + Rast > AX)) then
begin
за пределами отрезка;
Rast := -1;
end
else
if Rast = 0 then
 на отрезке;
else
 Rast := abs((AM.X*BM.Y - AM.Y*BM.X)/sqrt(Rast));
end;


 
Перпендикуляр   (2005-04-14 01:33) [16]


> XProger ©   (13.04.05 14:40) [15]
> Расстояние от точки M до отрезка AB

А перпендикуляр ?


 
VolanD666   (2005-04-14 18:32) [17]

Я ведь написал:
1) Составить уравнение прямой (для которой нужен перпендикуляр):
  A*x+B*y+C=0
 
  A=(p2.y-p1.y);
  B=-(p2.x-p1.x);
  C=(p2.x-p1.x)*p1.y-(p2.y-p1.y)*p1.x;

  p1,p2- точки через которые проходит прямая.

2) Составить уравнение перпендикуляра:
  A*(y-y1)-B*(x-x1)=0;


 
XProger ©   (2005-04-14 23:07) [18]

Перпендикуляр, расстояние это и есть перпендикуляр!
Но для отрезка его просто может не быть!


 
Перпендикуляр   (2005-04-15 01:19) [19]


> 2) Составить уравнение перпендикуляра:
>   A*(y-y1)-B*(x-x1)=0;

А что такое x, x1, y, y1 ?
И как их из этого уравнения можно найти 7


> XProger ©   (14.04.05 23:07) [18]
> Перпендикуляр, расстояние это и есть перпендикуляр!

Нет. Нужна точка пересечения линии, и перпендикуляра опущенного на неё с прямой.


> Но для отрезка его просто может не быть!

Тогда надо это указать.


 
VolanD666   (2005-04-15 12:36) [20]


> Нет. Нужна точка пересечения линии, и перпендикуляра опущенного
> на неё с прямой.

Решаем систему уравнений:
A*x+B*y+C=0
A*(y-y1)-B*(x-x1)=0;
(x1,y1- координаты точки через которую проходит перпендикуляр)


 
XProger ©   (2005-04-15 13:14) [21]

Перпендикуляр,
Читай внимательно первый ПОСТ!!!
И мой ответ с комментами!

if not((AX + Rast > BX) and (BX + Rast > AX)) then
begin
за пределами отрезка;
Rast := -1; <<< НЕТ ПЕРМЕНДИКУЛЯРА! ПОНЯТНО?
end
else
if Rast = 0 then
на отрезке; <<< ПОНЯЛ???
else
Rast := abs((AM.X*BM.Y - AM.Y*BM.X)/sqrt(Rast));


 
Перпендикуляр   (2005-04-16 01:32) [22]


> XProger ©   (15.04.05 13:14) [21]
> <<< ПОНЯЛ???

Надо в 3D.


 
XProger ©   (2005-04-16 03:22) [23]

Перпендикуляр, от этого расстояние изменится? ;) Просто в уравнении прямой появистся ещё одна часть (z - z1)/(z2 - z1) Что к чему надеюсь понятно...



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

Текущий архив: 2005.07.31;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.038 c
14-1121065517
by
2005-07-11 11:05
2005.07.31
Жилье в Киеве. Нужна помощь.


6-1113650941
-[ HAWK ]-
2005-04-16 15:29
2005.07.31
Подключение к инету


1-1121088537
webpauk
2005-07-11 17:28
2005.07.31
Посылка сообщения


1-1121242644
granni
2005-07-13 12:17
2005.07.31
передача параметров по ссылке


14-1120477436
vadims
2005-07-04 15:43
2005.07.31
Психиатрия: МДП . Нужен совет





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