| 246 | } |
| 247 | |
| 248 | static inline bool intersectsphere(const vec &from, const vec &to, vec center, float radius, float &dist) |
| 249 | { |
| 250 | vec ray(to); |
| 251 | ray.sub(from); |
| 252 | center.sub(from); |
| 253 | float v = center.dot(ray), |
| 254 | inside = radius*radius - center.squaredlen(); |
| 255 | if(inside < 0 && v < 0) return false; |
| 256 | float raysq = ray.squaredlen(), d = inside*raysq + v*v; |
| 257 | if(d < 0) return false; |
| 258 | dist = (v - sqrtf(d)) / raysq; |
| 259 | return dist >= 0 && dist <= 1; |
| 260 | } |
| 261 | |
| 262 | static inline bool intersectcylinder(const vec &from, const vec &to, const vec &start, const vec &end, float radius, float &dist) |
| 263 | { |
no test coverage detected