Главная страница
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.51 MB
Время: 0.037 c
1-1121085218
paul_k
2005-07-11 16:33
2005.07.31
Как всегда наступил на грабли под названием AV В чем тут ошибка?


6-1114362406
Kosald
2005-04-24 21:06
2005.07.31
Страница в новом окне


1-1121173494
ANB
2005-07-12 17:04
2005.07.31
Как достать список методов объекта ?


9-1113573787
Yegorchic
2005-04-15 18:03
2005.07.31
Звезда


4-1117649455
vi.ki.ng-vku
2005-06-01 22:10
2005.07.31
Перехват нажатия клавиши