// the easy one, no transforms
public class RTSphere extends RTShape {
	public Vector3D center_ = new Vector3D(true);
	public double r_;
	static Vector3D vmc_ = new Vector3D(),
		temp_ = new Vector3D();	
	double rayHits(Vector3D v, Vector3D w) {
		v.minus(center_,vmc_);
		double A = w.dot(w),
			B = 2*vmc_.dot(w),
			C = vmc_.dot(vmc_) - r_*r_,
			Bsqm4AC = B*B - 4*A*C;
		if(Bsqm4AC<0)
			return -1;
		double sqrtBsqm4AC = Math.sqrt(Bsqm4AC);
		if(-B-sqrtBsqm4AC < 0) // allow no negativity
			return -1;
		return (-B-sqrtBsqm4AC)/(2*A);
	}
	void getNormal(double t,Vector3D v, Vector3D w, Vector3D retP, Vector3D retNormal) {
		w.times(t,temp_);
		temp_.add(v,retP);
		retP.minus(center_,retNormal);
		retNormal.normalize();		
	}
	void transform(Matrix3D m) {}
}
