Exemplo n.º 1
0
        public static Circle2d[] PointPoint(Point2d p1, Point2d p2, double radius)
        {
            // compute the circles which intersect at p1,p2 with radius 'rad'
            double a = p1.Distance(p2);

            if (MathUtil.IsZero(a))
            {
                return(null);    //through one point
            }
            double d = 4.0 * radius * radius - a * a;

            if (d < 0.0)
            {
                return(null);         //not possible
            }
            d = Math.Sqrt(d) * 0.5;

            //vector from midpoint of p1-p2 to center of circles
            //that is vector p2-p1, rotaded 90 degrees, normalized and multiplied by distance to circle center
            double vx   = ((p2.Y - p1.Y) / a) * d;
            double vy   = -((p2.X - p1.X) / a) * d;
            double midx = (p1.X + p2.X) * 0.5;
            double midy = (p1.Y + p2.Y) * 0.5;

            return(new Circle2d[] {
                new Circle2d(midx + vx, midy + vy, radius),
                new Circle2d(midx - vx, midy - vy, radius)
            });
        }
Exemplo n.º 2
0
 public override double Distance(Point2d p)
 {
     if (IsAngleOnArc(Center.Angle(p)))
     {
         return(Center.Distance(p) - Radius);
     }
     else
     {
         return(Math.Min(start.Distance(p), end.Distance(p)));
     }
 }
Exemplo n.º 3
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));
        }
Exemplo n.º 4
0
 public override double Distance(Point2d p)
 {
     return(Math.Abs(center.Distance(p) - radius));
 }
Exemplo n.º 5
0
        public static Circle2d From2Points(Point2d p1, Point2d p2)
        {
            Point2d center = new Point2d((p1.X + p2.X) / 2.0, (p1.Y + p2.Y) / 2.0);

            return(new Circle2d(center, center.Distance(p1)));
        }