more line cylinder intersect fixes

git-svn-id: svn://svn.code.sf.net/p/actiongame/code/trunk/ac@5112 e016b1c5-ed68-44aa-a2f7-31cac88cffde
This commit is contained in:
Lee Salzman
2010-05-30 07:31:35 +00:00
parent 8e2cb151ba
commit 3fd6af179f
+14 -13
View File
@@ -226,27 +226,28 @@ static inline bool intersectcylinder(const vec &from, const vec &to, const vec &
else dist = 0;
return true;
}
float b = dd*mn - nd*md,
discrim = b*b - a*c;
if(discrim < 0) return false;
dist = (-b - sqrtf(discrim)) / a;
else if(c > 0)
{
float b = dd*mn - nd*md,
discrim = b*b - a*c;
if(discrim < 0) return false;
dist = (-b - sqrtf(discrim)) / a;
}
else dist = 0;
float offset = md + dist*nd;
if(offset < 0)
{
if(nd <= 0) return false;
dist = -md / nd;
if(k + dist*(2*mn + dist*nn) > 0) return false;
float cdist = -md / nd;
if(k + dist*(2*mn + cdist*nn) <= 0) dist = cdist;
else if(c <= 0) return false;
}
else if(offset > dd)
{
if(nd >= 0) return false;
dist = (dd - md) / nd;
if(k + dd - 2*md + dist*(2*(mn-nd) + dist*nn) > 0) return false;
}
else if(c <= 0)
{
dist = 0;
return true;
float cdist = (dd - md) / nd;
if(k + dd - 2*md + cdist*(2*(mn-nd) + cdist*nn) <= 0) dist = cdist;
else if(c <= 0) return false;
}
return dist >= 0 && dist <= 1;
}