示例#1
0
        public static Parabola2d FromFocusAndDirectrix(Point2d focus, Line2d directrix)
        {
            Point2d ondir   = directrix.ClosestPointInfinite(focus);
            Point2d vertex  = new Point2d(0.5 * (ondir.X + focus.X), 0.5 * (ondir.Y + focus.Y));
            double  focdist = focus.Distance(vertex);
            double  rot     = focus.Angle(ondir) + MathUtil.Deg90;


            if (focdist <= 1e-30)
            {
                return(null);
            }

            return(new Parabola2d(vertex, rot, focdist));
        }
示例#2
0
        public override Point2d ClosestPoint(Point2d from)
        {
            if (Linear)
            {
                return(new Line2d(start, end).ClosestPoint(from));
            }

            Point2d ce     = Center;
            Point2d oncirc = ce.Polar(ce.Angle(from), Radius);

            if (IsCirclePointOnArc(oncirc))
            {
                return(oncirc);
            }

            return(from.ClosestPoint(start, end));
        }