Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Есть два луча Как найти на них две ближайшие друг к другу точки?


Страницы:   1 2

MainRay ©   (2007-02-08 05:26:00) 

Лучи заданы точкой и направлением.

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

Погуглистам сразу идти нах.


Думкин   (2007-02-09 08:41:00) [21]

Строгого минимума может не быть. Если не ясно, что с этим делать - можно присоединиться к погуглистам.


Думкин   (2007-02-09 08:39:00) [22]

Методика такая:
1. Задаем лучи параметрически с областью определения параметров - положительная полуось действительных чисел.
2. Строим функцию расстояния между произвольными точками лучей. Функция двух переменных. Ищем минмумум.
3. Если при минимуме оба параметра положительные - то нашли. Если хотя бы один отрицательный - то значит минимум реализуется на границе одного из лучей.
4. Ищем расстояния от концов лучей до соседа. Выбираем минимальное.

Кто не понял, может идти вслед за гуглистами. адьез.


MainRay   (2007-02-09 06:31:00) [23]


> Asteroid ©   (09.02.07 04:44) [4]
>
> http://www.realtimerendering.com/int/?

"Ray/ray: Ronald Goldman, Intersection of Two Lines in Three-Space, Graphics Gems, p. 304.".
И что?


> Rial ©   (09.02.07 05:26) [5]
>
> > [2] MainRay   (09.02.07 01:57)
> > Если вычесть самого себя, то будет ноль. Неужели ты таких
> > простых вещей не знаешь?
>
> Странный народ пошел, я в шоке просто...
> Мне твои колкости не нужны, ошибся адресом :)
> Я, в отлиции от тебя, знаю, как решить твою задачу.


Ты знаешь как получить ноль, а не задачу решить.
И это не колкость, а деликатность. Другой бы дураком обозвал, а я только вежливо указал на ошибку.


Rial   (2007-02-09 05:26:00) [24]

> [2] MainRay   (09.02.07 01:57)
> Если вычесть самого себя, то будет ноль. Неужели ты таких
> простых вещей не знаешь?

Странный народ пошел, я в шоке просто...
Мне твои колкости не нужны, ошибся адресом :)
Я, в отлиции от тебя, знаю, как решить твою задачу. Это объективный параметр.
От того, что ты нашел, к чему придраться, ты не стал ближе к цели.
Если что не понятно - так и спроси.


> [3] MainRay   (09.02.07 02:00)
> Осталось только выяснить что в них что обозначает.

В данном случае это поворот вектора по оси Z.
Cs и Sn - это косинус и синус угла поворота.
X и Y - координаты вектора.
Чтобы повернуть в обратном направлении, нужно
посчитать координаты по формуле
X :=X * Cs + Y * Sn;
Y :=Y * Cs - X * Sn;


Asteroid   (2007-02-09 04:44:00) [25]

http://www.realtimerendering.com/int/?


MainRay   (2007-02-09 02:00:00) [26]


> Rial ©   (08.02.07 10:09) [1]
> 2)
> рассматриваем A1.
> используется формула
> X :=X * Cs - Y * Sn;
> Y :=Y * Cs + X * Sn;

Осталось только выяснить что в них что обозначает.

А про синусы и косинусы рекомендую забыть. Здесь вам не школа.


MainRay   (2007-02-09 01:57:00) [27]


> Rial ©   (08.02.07 10:09) [1]
> 1)
> Tmp:=A1;
> A1:=A1 - Tmp;

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


Rial   (2007-02-08 10:09:00) [28]

A1(x01, y01, z01) - точка, V1(x1, y1, z1) - направление.
Аналогично
A2, V2.

1)
Tmp:=A1;
A2:=A2 - Tmp;
A1:=A1 - Tmp;

2)
рассматриваем A1.
используется формула
X :=X * Cs - Y * Sn;
Y :=Y * Cs + X * Sn;
а) Ищем коэффициенты для уравнение такие, чтобы
после поворота V1 лежал в плоскости XY.
б) На полученный угол поворачиваем V2.
Итак, имеем V1 лежащий в XY и М2.
в) Операции а) и б) проделываем с целью,
чтобы V1 лежал на оси X.

3)Имеем уравнение луча L2 = A2 + V2''(x).
V2'' - дважды повернутый V2.
Теперь выражаем координаты Y и Z луча L2
через X.
Расстояние, очевидно, между лучами будет
Hypot(Y, Z);
Ищем точку X, в которой оно минимально.
Это уравнение от 1 переменной, решить которое
не составляет труда.

4)Точку получили.
Теперь вспоминаем, что вектор был 2 рааз повернут.
Выполняем обратный поворот  - и результат готов.

Алгортм рабочий и взят не с потолка.
Если тебе нужен котовый код - можешь идти туда
же, куда ты послал гуглистов :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо