Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Геометрические объекты.

Ответить
Настройки темы
Геометрические объекты.

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


вопрос в следующем:

как наыти точку пересечения геометрического объекта(примитива) и луча?

примитивы:
плоскость
сфера
цилинтр
конус
паралелепипед
полигон

и как это будет выглядеть в коде.
или хотябы с математической форме?

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 21:47, 04-01-2004

 

Аватара для shurikan

Старожил


Сообщения: 240
Благодарности: 1

Профиль | Отправить PM | Цитировать


Vlad Drakula
Это задача из курса аналитической геометрии. Луч (т.е. прямая) описывается парой уравнений плоскостей:
ax+by+cz=d,
Ax+By+Cz=D.
Это два уравнения из трех. Твой примитив д.б. описан в виде уравнения:
F(x,y,z)=E.
Вот тебе третье уравнение. Решаешь их совместно, получаешь общие точки.

-------
UNIX, UNAS и др. Myself I'll like 'em


Отправлено: 01:35, 05-01-2004 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


это понятно, это самое простое.

Если кому интересно то вот реализация:

int Plane::Intersect( Ray& ray, double& t)
{
 double vd = n&ray.Dir;

 if(vd > -EPS && vd < EPS)
   return 0;

 t = - (( n&ray.Org ) + D )/vd;

 return t > GeomThreshold;
}

Соответственно для сферы:

int Sphere::Intersect( Ray& ray, double& t)
{
 Vector l = Loc - ray.Org;
 double L2OC = l&l;
 double tca = l&ray.Dir;
 double t2hc = Radius - L2OC + tca*tca;
 double t2;

 if( t2hc <= 0.0 )
   return 0;

 t2hc = sqrt( t2hc );

 if ( tca < t2hc)
 {
   t = tca + t2hc;
   t2 = tca - t2hc;
 }
 else
 {
   t = tca - t2hc;
   t2 = tca + t2hc;
 }

 if( fabs (t) < GeomThreshold )
   t = t2;

 return t > GeomThreshold;
}

а для остальных объектов???

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 19:41, 06-01-2004 | #3


Аватара для Guest

Guest


Профиль | Цитировать


2 Vlad Drakula
вот уж не знаю самому проще написать или попробовать догадаться кто такие Ray и ему подобные ... )

Отправлено: 20:00, 09-01-2004 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Геометрические объекты.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
отсутствуют объекты контейнера ForeignSecurityPrincipals Fighter Microsoft Windows NT/2000/2003 5 24-12-2014 15:59
Ярко засвеченные объекты в 3D dm451 Видеокарты 3 03-01-2010 18:53
[решено] Настройка аудита на объекты dimds Microsoft Windows NT/2000/2003 5 06-07-2006 12:40
DreamWeaver - объекты поверх изображений SuperMaximus Вебмастеру 7 24-08-2005 17:21
JS: Объекты + слоя ? Proft Вебмастеру 1 08-08-2003 18:27




 
Переход