예제 #1
0
    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
        });
    }
예제 #2
0
 public override Vector normal(Vector pos)
 {
     return(Help.norm(Vector.Add(pos, -center)));
 }