using System; public class Torus:Implicit { public double rminor, rmajor; public Torus() { rminor=0.1; rmajor=1.0; } public Torus(double rminor, double rmajor) { this.rminor=rminor; this.rmajor=rmajor; } public override double dist(Vector p) { double dist; dist=Math.Sqrt(p.x*p.x+p.y*p.y)-rmajor; dist=Math.Sqrt(dist*dist+p.z*p.z)-rminor; return dist; } public override double func(Vector p) { double dist; dist=Math.Pow(Math.Sqrt(p.x*p.x+p.y*p.y)-rmajor, 2.0)+ p.z*p.z-rminor*rminor; return dist; } public override object Clone() { object o=new Torus(rminor, rmajor); return o; } public override string ToString() { return "Primitive::Torus()";} }