anchor.diff:                      let mutable t = 0.0
                       let mutable pt = V3d.Zero
                       if ray.Intersects(p0, &t, &pt) then
  -                        let d = Vec.cross (pt - cylinder.P0) va |> Vec.lengthSquared
  -                        if d < r2 then Some t
  +                        let d = Vec.lengthSquared (pt - cylinder.P0)
  +                        if d <= r2 then Some t
                           else None
                       else
                           None
  
positive.code:                 Some t
              else
                  None
  
          static member Intersects(x : RayPart, box : Box3d) =
              let ray = x.Ray
              let mutable tmin = x.TMin
  
negative.code:                     let mutable t = 0.0
                      let mutable pt = V3d.Zero
                      if ray.Intersects(p1, &t, &pt) then
                          let d = Vec.lengthSquared (pt - cylinder.P1)
                          if d <= r2 then Some t
                          else None
                      else
                          None
  
                  match List.choose id [t1;t2;t3;t4] with
                      | [] -> None
                      | all -> List.min all |> Some
  
  