public override Intersection intersect(Ray ray) { var eo = Vector.Add(center, -ray.start); var v = Vector.DotProduct(eo, ray.dir); var dist = 0.0f; if (v >= 0) { var disc = radius2 - (Vector.DotProduct(eo, eo) - v * v); if (disc >= 0) { dist = (float)(v - Math.Sqrt(disc)); } } if (Math.Abs(dist) < 1e-5) { return(null); } return(new Intersection { thing = this, ray = ray, dist = dist }); }
public override Vector normal(Vector pos) { return(Help.norm(Vector.Add(pos, -center))); }