![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
GLScene Как найти минимальное расстояние от точки до прямой ?
VectorGeometry © (2005-03-23 04:24:00)( Прямая задана двумя точками. ) Ведь наверняка есть какие то функции там.
Думкин (2005-03-23 13:55:00) [1]Да, можно проще если подумать:
http://algolist.manual.ru/maths/geom/distance/pointline.php
Думкин (2005-03-23 13:48:00) [2]В общем я бы без Гугля так пошел вначале(может и получше что потом найду):
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%EE%E9
Первая же ссылка приводит куда надо.
A22 (2005-03-23 13:35:00) [3]2 VectorGeometry
такие вопросы лучше всего задавать математическому справочнику или Гуглу...
а еще лучше - голове!
Думкин (2005-03-23 13:34:00) [4]> [6] MBo © (23.03.05 13:13)
Точно. Для гиперповерхности. То есть для двумерного катит, а в трехмерке нет.
Но.. что нам стоит дом построить? Счас.
MBo (2005-03-23 13:13:00) [5]>Думкин
это у тебя для плоскости.
Думкин (2005-03-23 07:35:00) [6]> //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) - твоя точка.
Вроде не наврал - по памяти - сейчас проверюсь.
VectorGeometry (2005-03-23 07:33:00) [7]
> Xeno © (23.03.05 07:24) [3]
> это он на С тебе написал похоже :-)))
На Си льник.
Xeno (2005-03-23 07:24:00) [8]это он на С тебе написал похоже :-)))
VectorGeometry (2005-03-23 06:58:00) [9]
> ViK © (23.03.05 06:53) [1]
Чё за язык-то такой странный ? Китайский чтоли ?
Нельзя-ли это как нибудь по-русски ? А то боюсь, ошибиться с переводом.
ViK (2005-03-23 06:53:00) [10]// Возвращает точку пересечения прямой и перпендикуляра,
// проходящий через заданную точку, в 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;
};
Код хоть и корявый зато работает
Перевести на Делфи думаю не сложно