Помогите пожалуйста разобраться с лучом. Мне говорили что-то про "время луча" (P + Vt), но что такое t я так и не понял.

Само задание, чтоб ориентироваться: Есть точка (в 3D), из нее торчит вектор. Нужно найти уравнение луча для него - это раз. Дальше дана вторая точка. Нужно найти ближайшую к ней точку на луче.

задан 29 Окт '13 14:31

Ну это же параметрическое задание прямой. Уравнением луча в параметрическом виде будет для каждой координаты. $$x = O.x + P.x * t;$$ $$y = O.y + P.y * t;$$ $$z = O.z + P.z * t;$$ $$для t >= 0;$$(как раз из прямой делаем луч) O - заданая точка. P - вектор Если нужно не в параметрическом виде, то нужно повыражать t и подставлять везде, короче алгебра :] Ближайшую точку нужно ручками? Если можно на компе то лучше тернарным поиском по расстоянию. Если руками, то нужно пустить перпендикуляр(в 3D не приходилось этого делать, лучше погуглить)

(29 Окт '13 16:14) algogol

t - это просто число(параметр). Если взять t = 1, то получим наш вектор отложенный от точки. Если t = -1, то вектор направленный в другую сторону :]. Возьмем наобум t = 1.1234 получим какую-то точку на луче.

(29 Окт '13 16:18) algogol
(30 Окт '13 11:32) algogol
10|600 символов нужно символов осталось
1

Если дана точка $%(x_0,y_0,z_0)$% и из неё исходит ненулевой вектор $%(a,b,c)$%, то этим задаётся луч, параметрическое уравнение которого имеет вид $%(x_0,y_0,z_0)+t(a,b,c)$%, где $%t\ge0$%. Его можно записать в координатном виде как систему их трёх условий: $%x=x_0+at$%, $%y=y_0+bt$%, $%z=z_0+ct$%.

Предположим теперь, что нам дана какая-то ещё точка с координатами $%(x_1,y_1,z_1)$%, и надо найти ближайшую к ней точку на луче. Найдём для начала ближайшую к ней точку не на луче, а на прямой. Параметрическое уравнение прямой будет такое же, но без ограничения $%t\ge0$%, то есть $%t$% может быть и отрицательным.

Рассмотрим квадрат расстояния от точки $%(x_1,y_1,z_1)$% до точки прямой с координатами $%x_0+at,y_0+bt,z_0+ct)$%. Эта величина представляет собой функцию от $%t$%, равную $%f(t)=(at+x_0-x_1)^2+(bt+y_0-y_1)^2+(ct+z_0-z_1)^2$%. Минимальное значение эта функция принимает в такой точке $%t$%, для которой производная функции по $%t$% равна нулю. Поскольку при дифференцировании везде будет появляться множитель $%2$%, мы сразу на него разделим, получая $%\frac12f'(t)=a(at+x_0-x_1)+b(bt+y_0-y_1)+c(ct+z_0-z_1)=0$%. Получилось линейное уравнение относительно $%t$% с положительным коэффициентом $%a^2+b^2+c^2$% при $%t$%. Из него значение $%t$% однозначно выражается.

Далее, если оказалось, что $%t\ge0$%, то ближайшая точка прямой лежит на луче, и просто подставляем это значение $%t$% в параметрическое уравнение. Это даёт ближайшую точку на луче (к точке $%(x_1,y_1,z_1)$%). Но может так оказаться, что $%t < 0$%. Тогда из геометрических соображений легко видеть, что ближайшей точкой на луче будет его начало,то есть $%(x_0,y_0,z_0)$%.

ссылка

отвечен 30 Окт '13 0:39

И все-же почему-то не получается.. То ли я туплю, то ли что.. Вот нашел t после того как приравнял производную к нулю: t = a(x1 - x0) + b(y1 - y0) + c(z1 - z0) / (aa + bb + cc) Но при том что я указываю по стандарту точку вне луча где-то возле него, но далеко от начальной точки, t чаще всего или равно нулю, либо принимает какие-то явно бредовые значения...

(4 Ноя '13 1:03) Влас

Вы можете привести здесь свои конкретные вычисления (например, в добавлении к тексту вопроса), и тогда можно будет сказать, есть ли в них какая-либо ошибка. Число $%t$% Вы находите правильно -- разве что выражение в числителе надо окружить скобками. Как я уже говорил, если $%t$% отрицательно, то ближайшей будет начало луча.

(4 Ноя '13 1:17) falcao

Введите координаты начальной точки x0 = 1; y0 = 1; z0 = 1; (1; 1; 1) Введите координаты вектора a = 4; b = 4; c = 4; (4; 4; 4) Введите координаты точки вне луча x1 = 2; y1 = 4; z1 = 2; (2; 4; 2) t = 0

Но ведь (2;4;2) ближе не к начальной точке?

(4 Ноя '13 4:07) Влас

Извиняюсь за абракадабру: все в одну строчку попереводило

(4 Ноя '13 4:08) Влас

А как у Вас получилось $%t=0$%? Согласно формуле, $$t=\frac{4(2-1)+4(4-1)+4(2-1)}{4^2+4^2+4^2}=\frac5{12}.$$ Тогда ближайшей точкой на луче будет $%(1,1,1)+t(4,4,4)=(8/3,8/3,8/3)$%.

(4 Ноя '13 6:59) falcao

Да, спасибо за замечание: затупил с самим типом данных для точек и вектора. То-есть t и l задал как double, но значения (x0, y0, z0), (a, b, c) и (x1, y1, z1) задал как int, думая что это никак не повлияет на дабловские t и l. Вот сейчас изменил, и теперь при тех же значениях t = 0.416667; l = 1.63299. Расстояние же правильное вышло, вроде как?

(4 Ноя '13 23:28) Влас

Вот оно, оказывается, в чём дело! Проблема была с программой, а не с математикой. А то я удивился, потому что формулы у Вас были верные. Численные значения теперь указаны правильно как для $%t$%, так и для расстояния.

(4 Ноя '13 23:43) falcao
показано 5 из 7 показать еще 2
10|600 символов нужно символов осталось
Ваш ответ

Если вы не нашли ответ, задайте вопрос.

Здравствуйте

Математика - это совместно редактируемый форум вопросов и ответов для начинающих и опытных математиков, с особенным акцентом на компьютерные науки.

Присоединяйтесь!

отмечен:

×123
×53

задан
29 Окт '13 14:31

показан
4556 раз

обновлен
4 Ноя '13 23:43

Отслеживать вопрос

по почте:

Зарегистрировавшись, вы сможете подписаться на любые обновления

по RSS:

Ответы

Ответы и Комментарии

Дизайн сайта/логотип © «Сеть Знаний». Контент распространяется под лицензией cc by-sa 3.0 с обязательным указанием авторства.
Рейтинг@Mail.ru