Форум
» Назад на решение задач по физике и термеху
Регистрация | Профиль | Войти | Забытый пароль | Присутствующие | Справка | Поиск

» Добро пожаловать, Гость: Войти | Регистрация
    Форум
    Математика
        Помогите, пожалуйста, с проверкой попадания отрезка в куб ?
Отметить все сообщения как прочитанные   [ Помощь ]
» Добро пожаловать на форум "Математика" «

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 ]
Модераторы: Roman Osipov, RKI, attention, paradise
  

Guest



Новичок

Помогите, пожалуйста, с проверкой попадания отрезка в куб ?

Есть куб с ребром размером 1, с центом в начале отсчёта.
Есть координаты двух точек, которые задают отрезок.

Как проверить попадает ли отрезок внутрь куба или нет ?

Всё в 3D.

Может быть это и легко, но просто я в математике не очень силён, поэтому и решил спросить у специалистов.

Всего сообщений: Нет | Присоединился: Never | Отправлено: 2 янв. 2007 1:56 | IP
Guest



Новичок

Если бы это был шар, то было бы проще. Я бы нашёл кратчайшее расстояние от отрезка до центра. И если бы это расстояние было бы меньше радиуса шара, то значит отрезок попадает внутрь него. Если нет, то нет.

А как быть с кубом - не понятно.

Всего сообщений: Нет | Присоединился: Never | Отправлено: 2 янв. 2007 2:09 | IP
Guest



Новичок

Да, и куб не повёрнут относительно осей.

Всего сообщений: Нет | Присоединился: Never | Отправлено: 2 янв. 2007 2:46 | IP
Ntony


Удален

"Попадает" - в смысле, пересечение не пусто, или целиком лежит? Если второе, то из-за того, что куб выпуклый, достаточно посмотреть лежат ли внутри оба конца.
Если первое - это задача на оптимизацию. Вектор, задающий отрезок, откладываешь от начала с коэффициентом. Решаешь задачу поиска коэффициента, при котором удовлетворяются все неравенства граней куба, а потом смотришь, попал ли коэффициент в промежуток (0,1) (при этом решить надо задачу минимизации коэффициента, предварительно проверив, не лежит ли начало отрезка в кубе).
Хм, надеюсь что-нибудь понятно.

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 2 янв. 2007 4:10 | IP
Guest



Новичок

А как составить неравенства граней куба?

Всего сообщений: Нет | Присоединился: Never | Отправлено: 2 янв. 2007 7:54 | IP
Ntony


Удален

А как он у тебя задается? Если векторами (их понадобится два перпендикулярных), которые задают нормали к четырем из шести поверхностей, то берешь эти векторы, откладываешь на 0.5 длины стороны куба и получаешь точку на одной из граней. Если к этой точке присовокупить тот самый нормальный вектор, для определения грани куба больше ничего не нужно. Правда, надо смотреть в какую сторону будет "внутрь" куба, то есть в одном из двух случаев надо будет вектор на -1 домножить.
Третий вектор, понятно, надо искать как векторное произведение первых двух, а потом тоже самое.
Итого все шесть граней задаются этими векторами, потом надо будет только смотреть на уравнения. вектор нормали выглядит как (A,B,C), что, насколько я помню, задает пов-сть в общем виде по ф-ле Ax+By+Cz+D=0, где D выбирается таким образом, чтобы отложенная точка на грани куба давала равенство. Учитывая, что точка имеет координаты +/-(0.5A,0.5B,0.5C), D=-/+0.5(A^2+B^2+C^2)
(Конечно, при условии, что вектор нормали единичной длины и сторона куба также единица).
Вот как-то так...

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 2 янв. 2007 14:02 | IP
Guest



Новичок

Да. Сторона куба единице. Про нормали, я не очень понимаю, но наверное тоже.

А как по этой формуле узнать заходит отрезок в куб или нет?
D=-/+0.5(A^2+B^2+C^2)
Что надо посчитать?

Всего сообщений: Нет | Присоединился: Never | Отправлено: 3 янв. 2007 3:06 | IP
Ntony


Удален

Отсюда из вектора нормали получаешь D - последний параметр в описании плоскости. К каждой нормали идут две плоскости куба, стоящие друг напротив друга.
Таким образом у тебя есть уже два уравнения плоскостей вида Ax+By+Cz+/-0.5(A^2+B^2+C^2)=0
Таких пар уравнений должно быть три штуки, для каждой из нормалей. Две нормали даны, третью, как я уже сказал, надо векторным произведением получить.
Теперь про внутри. Так как параллельных граней две, то надо смотреть чтобы точка попала между гранями. Понятно, что с одной стороны грани уравнение полупространства будет выглядеть как Ax+By+Cz+D>0(<0)
Соответственно, эти уравнения ты и делаешь для соответствующих значений D - учитывая, что они для пары параллельных плоскостей различаются только знаком, то для положительного надо делать <0, а для отрицательного >0 (можно строгие неравенства, если достаточно, чтобы отрезок касался куба). После того как все шесть подобных неравенств составлены, любая точка внутри куба будет удовлетворять всем шести, а для точек снаружи всегда найдется неравенство, которому она не удовлетворяет.

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 3 янв. 2007 15:34 | IP
Ntony


Удален

Ой, перепутал знаки для положительных-отрицательных D...
Чтобы не путаться всегда подставляй для проверки точку (0,0,0) - она должна быть внутри, соответственно знаки подбирай исходя из условия, что центр удовлетворяет всем неравенствам.

Всего сообщений: N/A | Присоединился: N/A | Отправлено: 3 янв. 2007 16:04 | IP
Mask


Новичок

Я нашёл более простое решение на просторах Интернета: http://www.acm.org/tog/GraphicsGems/gems/RayBox.c

Правда не совсем его понимаю. Но главное, что работает.

Просто уравнения плоскостей - это как то сложно для тех, кто далёк от математики. В школе учили всё для плоскостей. Там уравнения прямых. x = y и т. п.



(Сообщение отредактировал Mask 8 янв. 2007 2:42)

Всего сообщений: 21 | Присоединился: январь 2007 | Отправлено: 8 янв. 2007 2:40 | IP

Отправка ответа:
Имя пользователя   Вы зарегистрировались?
Пароль   Забыли пароль?
Сообщение

Использование HTML запрещено

Использование IkonCode разрешено

Смайлики разрешены

Опции отправки

Добавить подпись?
Получать ответы по e-mail?
Разрешить смайлики в этом сообщении?
Просмотреть сообщение перед отправкой? Да   Нет
 

Переход к теме
<< Назад Вперед >>
Несколько страниц [ 1 2 ]

Форум работает на скрипте © Ikonboard.com