Показать полную графическую версию : Геометрические объекты.
Vlad Drakula
04-01-2004, 21:47
вопрос в следующем:
как наыти точку пересечения геометрического объекта(примитива) и луча?
примитивы:
плоскость
сфера
цилинтр
конус
паралелепипед
полигон
и как это будет выглядеть в коде.
или хотябы с математической форме?
shurikan
05-01-2004, 01:35
Vlad Drakula
Это задача из курса аналитической геометрии. Луч (т.е. прямая) описывается парой уравнений плоскостей:
ax+by+cz=d,
Ax+By+Cz=D.
Это два уравнения из трех. Твой примитив д.б. описан в виде уравнения:
F(x,y,z)=E.
Вот тебе третье уравнение. Решаешь их совместно, получаешь общие точки.
:)
Vlad Drakula
06-01-2004, 19:41
это понятно, это самое простое.
Если кому интересно то вот реализация:
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;
}
а для остальных объектов???
2 Vlad Drakula
вот уж не знаю самому проще написать или попробовать догадаться кто такие Ray и ему подобные ... ;))
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.