public HitRecord hitNearestPoint(Vector3D start, Vector3D direction, double mint, double maxt){
		Vector3D ec = Vector3D.Substract(start, center);
		double ec2 =Vector3D.DotProduct(ec, ec);
		double d2 = 1;//Length(direction) = 1;
		double ecd = Vector3D.DotProduct(direction, ec);
		double discriminant = ecd * ecd - d2 * (ec2 - radius*radius);
		HitRecord record = null;
		if(discriminant > 0){
			double sqrt = Math.sqrt(discriminant);
			double t1 = (-1*ecd - sqrt) / d2;
			double t2 = (-1*ecd + sqrt) / d2;
			double distance = -1;
			if(t2 > mint && t2 < maxt) distance = t2;
			if(t1 > mint && t1 < maxt) distance = t1;//t1 < t2
			if(distance > 0){
				Vector3D hitPt = Vector3D.Add(start, Vector3D.Scale(direction, distance));
				record = new HitRecord(hitPt, this, distance);
			}
		}
		
		return record;
	}