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
Новичок
|
Я нашёл более простое решение на просторах Интернета: внешняя ссылка удалена Правда не совсем его понимаю. Но главное, что работает. Просто уравнения плоскостей - это как то сложно для тех, кто далёк от математики. В школе учили всё для плоскостей. Там уравнения прямых. x = y и т. п. (Сообщение отредактировал Mask 8 янв. 2007 2:42)
|
Всего сообщений: 21 | Присоединился: январь 2007 | Отправлено: 8 янв. 2007 2:40 | IP
|
|
|