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

Вниз

GLScene Как найти минимальное расстояние от точки до прямой ?   Найти похожие ветки 

 
VectorGeometry   (2005-03-23 04:24) [0]

( Прямая задана двумя точками. ) Ведь наверняка есть какие то функции там.


 
ViK ©   (2005-03-23 06:53) [1]

// Возвращает точку пересечения прямой и перпендикуляра,
// проходящий через заданную точку, в 2D пространстве
void GetPerpendic(float x1, float y1, float x2, float y2, float dx, float dy, float &x, float &y)
//x1,y1,x2,y2 - координыты концов прямой
//dx,dy - заданная точка
//x,y - точка пересечения
{
float k1,k2,b1,b2;
vpVector2f v;

 v(x2-x1,y2-y1);
 if (v.x == 0.0 || v.y == 0.0) return;

 k1=v.y/v.x; b1=y1-k1*x1;
 k2=-1/k1; b2=dy-k2*dx;
 x=(b2-b1)/(k1-k2); y=k1*x+b1;
};

Код хоть и корявый зато работает
Перевести на Делфи думаю не сложно


 
VectorGeometry   (2005-03-23 06:58) [2]


> ViK ©   (23.03.05 06:53) [1]

Чё за язык-то такой странный ? Китайский чтоли ?
Нельзя-ли это как нибудь по-русски ? А то боюсь, ошибиться с переводом.


 
Xeno ©   (2005-03-23 07:24) [3]

это он на С тебе написал похоже :-)))


 
VectorGeometry   (2005-03-23 07:33) [4]


> Xeno ©   (23.03.05 07:24) [3]
> это он на С тебе написал похоже :-)))

На Си льник.


 
Думкин ©   (2005-03-23 07:35) [5]

> //x1,y1,x2,y2 - координыты концов прямой

Прям откровение - конец прямой. Формула есть:

d(P(x0,y0,z0)) = abs(A*x0+B*y0+C*z0+D)/sqrt(sqr(A)+sqr(B)+sqr(C))

прямая задана Ax+By+Cz+D=0 P(x0,y0,z0) - твоя точка.

Вроде не наврал - по памяти - сейчас проверюсь.


 
MBo ©   (2005-03-23 13:13) [6]

>Думкин
это у тебя для плоскости.


 
Думкин ©   (2005-03-23 13:34) [7]

>  [6] MBo ©   (23.03.05 13:13)

Точно. Для гиперповерхности. То есть для двумерного катит, а в трехмерке нет.
Но.. что нам стоит дом построить? Счас.


 
A22 ©   (2005-03-23 13:35) [8]

2 VectorGeometry
такие вопросы лучше всего задавать математическому справочнику или Гуглу...
а еще лучше - голове!


 
Думкин ©   (2005-03-23 13:48) [9]

В общем я бы без Гугля так пошел вначале(может и получше что потом найду):

1. Считаем что прямая задана одной точкой X и вектором N.
2. И дана точка Y
3. Есть вектор XY и N. Находим векторное - K
4. Далее находим векторное K и N. Это M.
5. собственно надо теперь уравнение плоскости с нормалью M и проходящую через X. A,B,C - это ясно координаты M. Найти D предоставляю автору.
6. Используем приведенную мной формулу.

Другое.
1. Точки на прямой имеют вид (Xx+Nx*t,Xy+Ny*t,Xz+Nz*t)
2. Берем ближайшую точку и выписываем условие ближайшести. Либо производную, либо ортогоноальность к ... ну ясно. уравнение одинаковое в итоге для t.
3. Находим t. Соответственно точку - считаем расстояние.

Другое.
http://www.yandex.ru/yandsearch?rpt=rad&text=%D0%E0%F1%F1%F2%EE%FF%ED%E8%E5+%EE%F2+%F2%EE%F7%EA%E8+%E4%EE+%EF%F0%FF%EC%E E%E9

Первая же ссылка приводит куда надо.


 
Думкин ©   (2005-03-23 13:55) [10]

Да, можно проще если подумать:
http://algolist.manual.ru/maths/geom/distance/pointline.php



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

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

Наверх




Память: 0.49 MB
Время: 0.043 c
1-1117593375
АлексейСм
2005-06-01 06:36
2005.06.29
Добавление данных из Делфи в таблицу Ворд


3-1116407444
Iova
2005-05-18 13:10
2005.06.29
InterBase с помощью ADO.


11-1086540713
Deimos
2004-06-06 20:51
2005.06.29
Linux


3-1116718926
grol
2005-05-22 03:42
2005.06.29
Как из ADOQuery ков перенести информацию в Excel?


4-1115265581
lokid7
2005-05-05 07:59
2005.06.29
CM_MOUSEENTER и WM_PAINT