Расстояние от точки до отрезка в 3D
От: ZakkeR Россия http://znav.narod.ru
Дата: 22.08.02 01:04
Оценка:
Не подскажет ли многоувожаемы олл
алгоритм (желательно по шагам и с формулами)
вычисления расстояния от точки до отрезка (не до прямой!)
Известно:
Отрезок: (x0,y0,z0)-(x1,y1,z1)
Точка: (x,y,z)

Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.


wbr ZakkeR
regards
Re: Расстояние от точки до отрезка в 3D
От: Bell Россия  
Дата: 22.08.02 06:11
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Не подскажет ли многоувожаемы олл

ZR>алгоритм (желательно по шагам и с формулами)
ZR>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>Известно:
ZR> Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR> Точка: (x,y,z)

ZR>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR>

ZR>wbr ZakkeR


Может быть тут?
Любите книгу — источник знаний (с) М.Горький
Re: Расстояние от точки до отрезка в 3D
От: Аноним  
Дата: 22.08.02 07:50
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Не подскажет ли многоувожаемы олл

ZR>алгоритм (желательно по шагам и с формулами)
ZR>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>Известно:
ZR> :up: Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR> :up: Точка: (x,y,z)

ZR>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR> :))

Концы отрезка пусть будут X и Y, а точка Z.
Тогда L=(X-Y)/|X-Y| будет нормированным (единичной длины) вектором сонаправленным с направлением из Y в X. Осталось найти скалярное произведение (считай проекцию на это направление) с вектором Z-Y. S=(Z-Y,L). Теперь нужную точку можно получить прибавив к координатам Y вектор L*S.

Более подробно. Опустим из Z перпендикуляр на прямую в точку P, задаваемую нашим отрезком. Как найти растояние YP? Для этого можно найти проекцию отрезка YZ на прямую. Для этого можно воспользоваться скалярным произведением: (X,e) = проекции X на e, если e — имеет единичную длину.
Re[2]: Расстояние от точки до отрезка в 3D
От: ZakkeR Россия http://znav.narod.ru
Дата: 22.08.02 08:22
Оценка:
Здравствуйте Bell, Вы писали:

B>Здравствуйте ZakkeR, Вы писали:


ZR>>Не подскажет ли многоувожаемы олл

ZR>>алгоритм (желательно по шагам и с формулами)
ZR>>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>>Известно:
ZR>> Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR>> Точка: (x,y,z)

ZR>>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR>>

ZR>>wbr ZakkeR


B>Может быть тут?


О! Сенька! То что надо!
regards
Re: Расстояние от точки до отрезка в 3D
От: Strudel  
Дата: 22.08.02 10:42
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Не подскажет ли многоувожаемы олл

ZR>алгоритм (желательно по шагам и с формулами)
ZR>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>Известно:
ZR> :up: Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR> :up: Точка: (x,y,z)

ZR>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR> :))

ZR>wbr ZakkeR




Найти три расстояния —
от концов отрезка(r1,r2)
до прямой на которой лежит отрезок(r3).

if(точка в которой перпендикуляр пересекает прямую не пренадлежит отрезку)
rmin=min(r1,r2)
else
rmin=r3
Re: Расстояние от точки до отрезка в 3D
От: Hacker_Delphi Россия  
Дата: 23.08.02 10:35
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Не подскажет ли многоувожаемы олл

ZR>алгоритм (желательно по шагам и с формулами)
ZR>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>Известно:
ZR> Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR> Точка: (x,y,z)

ZR>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR>

ZR>wbr ZakkeR

Самое простое:
    *посчитать расстояние до прямой.
    *если ближайшая точка прямой находится в отрезке — конец;
    *иначе посчитать расстояния до концов отрезка;
    *взять минимальное — это и есть результат.
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[2]: Расстояние от точки до отрезка в 3D
От: ZakkeR Россия http://znav.narod.ru
Дата: 25.08.02 22:31
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

HD>Здравствуйте ZakkeR, Вы писали:


ZR>>Не подскажет ли многоувожаемы олл

ZR>>алгоритм (желательно по шагам и с формулами)
ZR>>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>>Известно:
ZR>> Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR>> Точка: (x,y,z)

ZR>>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR>>

ZR>>wbr ZakkeR

HD>Самое простое:
HD>

    HD>*посчитать расстояние до прямой.
    HD>*если ближайшая точка прямой находится в отрезке — конец;
    HD>*иначе посчитать расстояния до концов отрезка;
    HD>*взять минимальное — это и есть результат.
    HD>

Хех, ясен перец, что это так
Вопрос в том, какие формулы работают на каждом из шагов. Хотя с 3-м и 4-м шагом все просто
Ну да ладно, где-то выше была хорошая ссылка...
regards
Re[3]: Расстояние от точки до отрезка в 3D
От: Hacker_Delphi Россия  
Дата: 26.08.02 07:20
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Здравствуйте Hacker_Delphi, Вы писали:


HD>>Здравствуйте ZakkeR, Вы писали:


ZR>>>Не подскажет ли многоувожаемы олл

ZR>>>алгоритм (желательно по шагам и с формулами)
ZR>>>вычисления расстояния от точки до отрезка (не до прямой!)
ZR>>>Известно:
ZR>>> Отрезок: (x0,y0,z0)-(x1,y1,z1)
ZR>>> Точка: (x,y,z)

ZR>>>Выражаясь математически, мне нужен минимум всех расстояний от заданной точки до всех точек, принадлежащих отрезку.

ZR>>>

ZR>>>wbr ZakkeR

HD>>Самое простое:
HD>>

    HD>>*посчитать расстояние до прямой.
    HD>>*если ближайшая точка прямой находится в отрезке — конец;
    HD>>*иначе посчитать расстояния до концов отрезка;
    HD>>*взять минимальное — это и есть результат.
    HD>>

ZR>Хех, ясен перец, что это так

ZR>Вопрос в том, какие формулы работают на каждом из шагов. Хотя с 3-м и 4-м шагом все просто
ZR>Ну да ладно, где-то выше была хорошая ссылка...
Так есть же стандартные формулы для расчета расстойния от точки до прямой %)
Там все просто:
Дано: (x1, y1) — начало отрезка, (x2, y2) — конец отрезка и (x0, y0) — точка.
  1. берем точки известные нам (концы отрезка) из них делаем уравнение вида: y = kX + c1
  2. делаем уравнение перпендикуляра. (точно не помню, однозначно, что y = (+/-)(1/k)X + c2, а вот как +/- надо сесть и поглядеть в геометрии). Перпендикуляр должен проходить через данную нам по задаче точку , что достигается подгонкой константы c2 (там тоже все просто — планиметрия, однако).
  3. по уравнению перпендикуляра и уравнению прямой находим x3 точки пересечения.
  4. проверяем, что етот x3 лежит в диапазоне (x1, x2) если лежит — считаем x3 и имеем координаты ближайшей к (x0, y0) точки отрезка, если не лежит — берем один из концов отрезка — тот, который ближе.
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
Re[4]: Расстояние от точки до отрезка в 3D
От: ZakkeR Россия http://znav.narod.ru
Дата: 27.08.02 01:04
Оценка:
Здравствуйте Hacker_Delphi, Вы писали:

HD>Дано: (x1, y1) — начало отрезка, (x2, y2) — конец отрезка и (x0, y0) — точка.

HD>

    HD>
  1. берем точки известные нам (концы отрезка) из них делаем уравнение вида: y = kX + c1
    HD>
  2. делаем уравнение перпендикуляра. (точно не помню, однозначно, что y = (+/-)(1/k)X + c2, а вот как +/- надо сесть и поглядеть в геометрии). Перпендикуляр должен проходить через данную нам по задаче точку , что достигается подгонкой константы c2 (там тоже все просто — планиметрия, однако).
    HD>
  3. по уравнению перпендикуляра и уравнению прямой находим x3 точки пересечения.
    HD>
  4. проверяем, что етот x3 лежит в диапазоне (x1, x2) если лежит — считаем x3 и имеем координаты ближайшей к (x0, y0) точки отрезка, если не лежит — берем один из концов отрезка — тот, который ближе.
    HD>
HD>

А если посмотреть в субж, то можно увидеть, что двухмерный случай нам не интересен
regards
Re[5]: Расстояние от точки до отрезка в 3D
От: Hacker_Delphi Россия  
Дата: 27.08.02 09:13
Оценка:
Здравствуйте ZakkeR, Вы писали:

ZR>Здравствуйте Hacker_Delphi, Вы писали:


HD>>Дано: (x1, y1) — начало отрезка, (x2, y2) — конец отрезка и (x0, y0) — точка.

HD>>

    HD>>
  1. берем точки известные нам (концы отрезка) из них делаем уравнение вида: y = kX + c1
    HD>>
  2. делаем уравнение перпендикуляра. (точно не помню, однозначно, что y = (+/-)(1/k)X + c2, а вот как +/- надо сесть и поглядеть в геометрии). Перпендикуляр должен проходить через данную нам по задаче точку , что достигается подгонкой константы c2 (там тоже все просто — планиметрия, однако).
    HD>>
  3. по уравнению перпендикуляра и уравнению прямой находим x3 точки пересечения.
    HD>>
  4. проверяем, что етот x3 лежит в диапазоне (x1, x2) если лежит — считаем x3 и имеем координаты ближайшей к (x0, y0) точки отрезка, если не лежит — берем один из концов отрезка — тот, который ближе.
    HD>>
HD>>

ZR>А если посмотреть в субж, то можно увидеть, что двухмерный случай нам не интересен

А адаптировать алгоритм для 3D слабо??? или работать в плоскости, которая образована отрезком и точкой??? :mainc:
Если при компиляции и исполнении вашей программы не происходит ни одной ошибки — это ошибка компилятора :)))
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.