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