void Ray3D::closestPoint(const Line3D& l,Real& t,Real& u) const { Line3D::closestPoint(l,t,u); if(t < 0) { t=0; u=l.closestPointParameter(source); } }
bool Circle3D::intersects(const Line3D& l,Real* _t) const { Plane3D p; getPlane(p); Real t; if(p.intersectsLine(l,&t)) { if(t == Inf) { //line lies in plane t = l.closestPointParameter(center); } if(_t) (*_t)=t; Point3D pt; l.eval(t,pt); return DistanceLEQ(pt,center,radius); } return false; }
Real HollowBall::closestPoint(const Line3D& line) const { return line.closestPointParameter(center); }