|
|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Serge Kanilo 2:5020/400 12 May 2001 04:17:04 To : All Subject : Re: пеpесечения -------------------------------------------------------------------------------- "Stepan Polovnikov" <Stepan.Polovnikov@p47.f16.n5056.z2.fidonet.org> wrote in message news:989607375@p47.f16.n5056.z2.FIDOnet.ftn... > ER> С достоинствами согласен. > Hет тут достоинств. > ER> А скоpость? Ты их не пpовеpял в деле? > Геометрическое решение быстрее. Принципиальной разницы нет, поскольку расписанное решение через уравнение второй степени приведет к тому же самому коду. > ;r-радиус сферы > ;с-центр сферы > ;o-точка луча > ;d-направление луча Hаправление имеет единичную длину, не так ли? Hе здесь ли кроется причина такой простоты? Ведь в этом случае уравнение будет t^2-2*(c-o)*d*t+(c-o)^2-r^2=0 Как раз на корень и несколько умножений отличается от исходной задачи. > r2=r*r ; расчитано ранее > > ; проверка пересечения > l=c-o > tca=l*d Явно готовимся к вычислению коэффициентов полинома. > m2=l*l-tca*tca > if (m2 > r2) return false Вот проверка на неотрицательность детерминанта if(tca*tca-l*l+r2<0). > ; определение расстояния > q=sqrt(r2-m2) Берем корень из детерминанта (все как в учебнике). > if (l2 > r2) t=tca-q > else t=tca+q А вот вроде и формула для вычисления корня. Если бы еще знать, что такое l2. > return t; Странно, программка то bool возвращает, то double, что за язык такой? :-) Просто непонятно, что возвращается и как его потом анализировать. Cheers, Serge --- ifmail v.2.15dev5 * Origin: Excite@Home - The Leader in Broadband http://home.com/f (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/21067566769d1.html, оценка из 5, голосов 10
|