Есть ли оптимизированное уравнение для вычисления пересечения сферы и линии, я знаю о ближайшем решении точки, но мне было интересно, есть ли другой. Существует также квадратичное уравнение, но оно требует большого количества вычислений, и я не уверен в всех ранних выходах, которые возможны с ним. Я знаю двух по (я думаю) ...Только оптимизированная сфера-линия?
Vec3 d = lineEnd - lineStart; // the ray
Vec3 f = lineStart - sphereCenter; // center -> lineStart
float c = dot(f, f) - radius * radius;
if(c <= 0)
{
// first out
// sphere is touching the vertex
// hit !
}
float b = dot(f, d);
if(b >= 0)
{
// second out
// line ray and center -> start, are going same direction
// if the start point didn't intersect above
// then there's no way for the segment or other point to
// miss
}
float a = dot(d, d);
// ... any other optimizations
if(b*b - a*c < 0)
{
// miss
}
Примечание: 'b' должно быть фактически' dot (f, d) * 2'. (Или, если вы действительно хотите оставить 2 фактора вне, '2 * b * b' в проверке дискриминанта должен быть' 4 * b * b'.) – Wyzard
@Wyzard хороший catch, я мог удалить оба этих 4s сейчас хотя я не мог? – user3901459