double t = this.plane.intersect(ray);
if (recorder.interval().contains(t)) {
Point3 p = ray.pointAt(t);
Vector3 dp = p.vectorFrom(this.center);
double u = 0.5 + 0.5 * dp.dot(basis.u()) / ru;
double v = 0.5 + 0.5 * dp.dot(basis.v()) / rv;
if (MathUtil.inRangeCC(u, 0.0, 1.0) && MathUtil.inRangeCC(v, 0.0, 1.0)) {