Exemplo n.º 1
0
        private ParametrsEllipse SearchEllipse(Triangle triangle)
        {
            ParametrsEllipse param  = new ParametrsEllipse();
            PointF           point1 = triangle.point1;
            PointF           point2 = triangle.point2;
            PointF           point3 = triangle.point3;

            if ((triangle.point1.X == triangle.point2.X && triangle.point2.X == triangle.point3.X ||
                 triangle.point1.Y == triangle.point2.Y && triangle.point2.Y == triangle.point3.Y) ||
                (triangle.point1 == triangle.point2 || triangle.point1 == triangle.point3 || triangle.point3 == triangle.point2))
            {
                param.center.X = 1e+6f;
                param.center.Y = 1e+6f;
                param.R        = 1e+6f;
            }
            else
            {
                param.center.X = (float)(((point2.X * point2.X - point1.X * point1.X + point2.Y * point2.Y - point1.Y * point1.Y) * (point3.Y - point1.Y) -
                                          (point3.X * point3.X - point1.X * point1.X + point3.Y * point3.Y - point1.Y * point1.Y) * (point2.Y - point1.Y))
                                         / (2 * ((point2.X - point1.X) * (point3.Y - point1.Y) - (point3.X - point1.X) * (point2.Y - point1.Y))));


                param.center.Y = (float)(((point3.X * point3.X - point1.X * point1.X + point3.Y * point3.Y - point1.Y * point1.Y) * (point2.X - point1.X) -
                                          (point2.X * point2.X - point1.X * point1.X + point2.Y * point2.Y - point1.Y * point1.Y) * (point3.X - point1.X))
                                         / (2 * ((point2.X - point1.X) * (point3.Y - point1.Y) - (point3.X - point1.X) * (point2.Y - point1.Y))));

                param.R = Math.Sqrt((param.center.X - point1.X) * (param.center.X - point1.X) + (param.center.Y - point1.Y) * (param.center.Y - point1.Y));
            }
            return(param);
        }
Exemplo n.º 2
0
        public List <Triangle> ReturnAllTriangles(List <PointF> p_points)
        {
            List <Triangle> list_trianglesBuf = new List <Triangle>();
            int             count             = p_points.Count;

            for (int i = 0; i < count - 2; i++)
            {
                for (int j = i + 1; j < count - 1; j++)
                {
                    for (int k = j + 1; k < count; k++)
                    {
                        Triangle         triangle = new Triangle();
                        ParametrsEllipse param    = new ParametrsEllipse();
                        triangle.point1 = p_points[i];
                        triangle.point2 = p_points[j];
                        triangle.point3 = p_points[k];
                        param           = SearchEllipse(triangle);

                        bool isOk = true;
                        for (int n = 0; n < count; n++)
                        {
                            if ((n == i) || (n == j) || (n == k))
                            {
                                continue;
                            }
                            float distance = (float)Math.Sqrt((p_points[n].X - param.center.X) * (p_points[n].X - param.center.X) +
                                                              (p_points[n].Y - param.center.Y) * (p_points[n].Y - param.center.Y));
                            if (((distance <= param.R)) || (distance > 1e+6) || (param.R > 1e+6))
                            {
                                isOk = false; break;
                            }
                            ;
                        }
                        if (isOk)
                        {
                            list_trianglesBuf.Add(triangle);
                        }
                    }
                }
            }


            return(list_trianglesBuf);
        }
Exemplo n.º 3
0
        public List <Triangle> AddPoint(PointF point)
        {
            if (!IsInMagnets(point))
            {
                Potential pot = new Potential {
                    point = point, value = 0
                };
                unknownPotential.Add(pot);

                List <PointF> newPoints = new List <PointF>();
                newPoints.Add(point);
                int numDeleting = 0;
                while (numDeleting < list_triangle.Count)
                {
                    bool detected = false;
                    numDeleting = 0;
                    int size_triangle = list_triangle.Count;
                    for (int i = 0; i < size_triangle; i++)
                    {
                        Triangle triangle   = list_triangle[i];
                        bool     IsInMagnet = false;
                        foreach (PointF bufPoint in FakePoints)
                        {
                            if ((triangle.point1 == bufPoint) ||
                                (triangle.point2 == bufPoint) ||
                                (triangle.point3 == bufPoint))
                            {
                                IsInMagnet = true; break;
                            }
                        }
                        if (!IsInMagnet)
                        {
                            ParametrsEllipse param = new ParametrsEllipse();
                            param = SearchEllipse(triangle);

                            float distance = (float)Math.Sqrt((point.X - param.center.X) * (point.X - param.center.X) +
                                                              (point.Y - param.center.Y) * (point.Y - param.center.Y));
                            if (distance < param.R && param.R < 1e+6)
                            {
                                bool new1 = true, new2 = true, new3 = true;
                                foreach (PointF bufPoint in newPoints)
                                {
                                    if (triangle.point1 == bufPoint)
                                    {
                                        new1 = false;
                                    }
                                    if (triangle.point2 == bufPoint)
                                    {
                                        new2 = false;
                                    }
                                    if (triangle.point3 == bufPoint)
                                    {
                                        new3 = false;
                                    }
                                }


                                if (new1)
                                {
                                    newPoints.Add(triangle.point1);
                                }
                                if (new2)
                                {
                                    newPoints.Add(triangle.point2);
                                }
                                if (new3)
                                {
                                    newPoints.Add(triangle.point3);
                                }
                                detected = true;

                                break;
                            }
                        }
                        numDeleting++;
                    }
                    if (detected)
                    {
                        list_triangle.RemoveAt(numDeleting);
                    }
                }

                List <Triangle> buffer_list2 = new List <Triangle>();
                buffer_list2.AddRange(ReturnAllTriangles(newPoints));

                numDeleting = 0;
                while (numDeleting < buffer_list2.Count)
                {
                    bool detected = false;
                    numDeleting = 0;
                    foreach (Triangle triangle in buffer_list2)
                    {
                        if (!((triangle.point1 == point) || (triangle.point2 == point) || (triangle.point3 == point)))
                        {
                            detected = true;
                            break;
                        }
                        numDeleting++;
                    }
                    if (detected)
                    {
                        buffer_list2.RemoveAt(numDeleting);
                    }
                }
                return(UpdateListTriangle(buffer_list2));
            }
            else
            {
                return(list_triangle);
            }
        }