public static double distance2 ( EllipseRotated_F64 ellipse , Point2D_F64 p ) { // put point into ellipse's reference frame double cphi = Math . cos ( ellipse . phi ) ; double sphi = Math . sin ( ellipse . phi ) ; double xc = p . x - ellipse . center . x ; double yc = p . y - ellipse . center . y ; double r = Math . sqrt ( xc * xc + yc * yc ) ; double x = cphi * xc + sphi * yc ; double y = - sphi * xc + cphi * yc ; double ct = x / r ; double st = y / r ; x = ellipse . center . x + ellipse . a * ct * cphi - ellipse . b * st * sphi ; y = ellipse . center . y + ellipse . a * ct * sphi + ellipse . b * st * cphi ; return p . distance2 ( x , y ) ; }
Euclidean distance squared of closest point on ellipse to point p .