private Point getThirdPoint(Point candidate1, Point candidate2, IntersectDistance minimumDistance)
        {
            double dist1 = getDistance(candidate1, minimumDistance.P1, minimumDistance.P2);
            double dist2 = getDistance(candidate2, minimumDistance.P1, minimumDistance.P2);

            return(dist1 < dist2 ? candidate1 : candidate2);
        }
        /// <summary>
        /// Ez működik általános esetre, amikor nincs pontos metszéspont
        /// 
        /// A legközelebbi 3 metszéspont átlagpontját adjuk vissza
        /// Válasszuk ki a metszéspontok távolságai közül a legrövidebb hármat
        /// Elméletileg a 3 távolság 6 metszéspontja lényegében 3 pont, amit keresünk, ezek átlaga kell
        /// </summary>
        public override Point CalculateCommonPoint(List<Intersection> intersections)
        {
            List<IntersectDistance> idistances = new List<IntersectDistance>();     // A metszéspontok távolságai
            IntersectDistance idist;
            for (int i = 0; i < intersections.Count; i++)
            {
                for (int j = 0; j < intersections.Count; j++)
                {
                    if (i != j)
                    {
                        // Egy metszet két metszéspontjának távolságát nem is vesszük figyelembe
                        idist = new IntersectDistance(intersections[i].Points[0], intersections[j].Points[1]);
                        if (!idistances.Contains(idist)) idistances.Add(idist);
                        idist = new IntersectDistance(intersections[i].Points[0], intersections[j].Points[0]);
                        if (!idistances.Contains(idist)) idistances.Add(idist);
                        idist = new IntersectDistance(intersections[i].Points[1], intersections[j].Points[1]);
                        if (!idistances.Contains(idist)) idistances.Add(idist);
                    }
                }
            }

            //---------------------új megoldás:--------------------

            // Az összes metszéspontot ebben a listában tároljuk
            List<Point> intersectPoints = new List<Point>();

            //Ebben a listában tároljuk el a k legközelebbi metszéspontokat
            List<Point> closestPoints = new List<Point>();

            IntersectDistance firstDistance = getMinimumDistance(idistances);
            closestPoints.Add(firstDistance.P1);
            closestPoints.Add(firstDistance.P2);

            foreach (Intersection i in intersections)
            {
                foreach (Point p in i.Points)
                {
                    if (!p.Equals(firstDistance.P1) && !p.Equals(firstDistance.P2))
                    {
                        intersectPoints.Add(p);
                    }
                }
            }

            Point candidate1 = getClosestPoint(firstDistance.P1, intersectPoints);
            Point candidate2 = getClosestPoint(firstDistance.P2, intersectPoints);

            closestPoints.Add(getThirdPoint(candidate1, candidate2, firstDistance));

            return LocationCalculator.PointAverage(closestPoints);

        }
        /// <summary>
        /// Ez működik általános esetre, amikor nincs pontos metszéspont
        ///
        /// A legközelebbi 3 metszéspont átlagpontját adjuk vissza
        /// Válasszuk ki a metszéspontok távolságai közül a legrövidebb hármat
        /// Elméletileg a 3 távolság 6 metszéspontja lényegében 3 pont, amit keresünk, ezek átlaga kell
        /// </summary>
        public override Point CalculateCommonPoint(List <Intersection> intersections)
        {
            List <IntersectDistance> idistances = new List <IntersectDistance>();     // A metszéspontok távolságai
            IntersectDistance        idist;

            for (int i = 0; i < intersections.Count; i++)
            {
                for (int j = 0; j < intersections.Count; j++)
                {
                    if (i != j)
                    {
                        // Egy metszet két metszéspontjának távolságát nem is vesszük figyelembe
                        idist = new IntersectDistance(intersections[i].Points[0], intersections[j].Points[1]);
                        if (!idistances.Contains(idist))
                        {
                            idistances.Add(idist);
                        }
                        idist = new IntersectDistance(intersections[i].Points[0], intersections[j].Points[0]);
                        if (!idistances.Contains(idist))
                        {
                            idistances.Add(idist);
                        }
                        idist = new IntersectDistance(intersections[i].Points[1], intersections[j].Points[1]);
                        if (!idistances.Contains(idist))
                        {
                            idistances.Add(idist);
                        }
                    }
                }
            }

            //---------------------új megoldás:--------------------

            // Az összes metszéspontot ebben a listában tároljuk
            List <Point> intersectPoints = new List <Point>();

            //Ebben a listában tároljuk el a k legközelebbi metszéspontokat
            List <Point> closestPoints = new List <Point>();

            IntersectDistance firstDistance = getMinimumDistance(idistances);

            closestPoints.Add(firstDistance.P1);
            closestPoints.Add(firstDistance.P2);

            foreach (Intersection i in intersections)
            {
                foreach (Point p in i.Points)
                {
                    if (!p.Equals(firstDistance.P1) && !p.Equals(firstDistance.P2))
                    {
                        intersectPoints.Add(p);
                    }
                }
            }

            Point candidate1 = getClosestPoint(firstDistance.P1, intersectPoints);
            Point candidate2 = getClosestPoint(firstDistance.P2, intersectPoints);

            closestPoints.Add(getThirdPoint(candidate1, candidate2, firstDistance));

            return(LocationCalculator.PointAverage(closestPoints));
        }
        public override bool Equals(object obj)
        {
            IntersectDistance idist = obj as IntersectDistance;

            return((this.P1.Equals(idist.P1) && this.P2.Equals(idist.P2)) || (this.P1.Equals(idist.P2) && this.P2.Equals(idist.P1)));
        }
 private Point getThirdPoint(Point candidate1, Point candidate2, IntersectDistance minimumDistance)
 {
     double dist1 = getDistance(candidate1, minimumDistance.P1, minimumDistance.P2);
     double dist2 = getDistance(candidate2, minimumDistance.P1, minimumDistance.P2);
     return dist1 < dist2 ? candidate1 : candidate2;
 }