Ejemplo n.º 1
0
        public static Vertices DouglasPeuckerSimplify(Vertices vertices, FP distanceTolerance)
        {
            bool     flag = vertices.Count <= 3;
            Vertices result;

            if (flag)
            {
                result = vertices;
            }
            else
            {
                bool[] array = new bool[vertices.Count];
                for (int i = 0; i < vertices.Count; i++)
                {
                    array[i] = true;
                }
                SimplifyTools.SimplifySection(vertices, 0, vertices.Count - 1, array, distanceTolerance);
                Vertices vertices2 = new Vertices(vertices.Count);
                for (int j = 0; j < vertices.Count; j++)
                {
                    bool flag2 = array[j];
                    if (flag2)
                    {
                        vertices2.Add(vertices[j]);
                    }
                }
                result = vertices2;
            }
            return(result);
        }
Ejemplo n.º 2
0
        private static void SimplifySection(Vertices vertices, int i, int j, bool[] usePoint, FP distanceTolerance)
        {
            bool flag = i + 1 == j;

            if (!flag)
            {
                TSVector2 tSVector  = vertices[i];
                TSVector2 tSVector2 = vertices[j];
                FP        fP        = -1.0;
                int       num       = i;
                for (int k = i + 1; k < j; k++)
                {
                    TSVector2 tSVector3 = vertices[k];
                    FP        fP2       = LineTools.DistanceBetweenPointAndLineSegment(ref tSVector3, ref tSVector, ref tSVector2);
                    bool      flag2     = fP2 > fP;
                    if (flag2)
                    {
                        fP  = fP2;
                        num = k;
                    }
                }
                bool flag3 = fP <= distanceTolerance;
                if (flag3)
                {
                    for (int l = i + 1; l < j; l++)
                    {
                        usePoint[l] = false;
                    }
                }
                else
                {
                    SimplifyTools.SimplifySection(vertices, i, num, usePoint, distanceTolerance);
                    SimplifyTools.SimplifySection(vertices, num, j, usePoint, distanceTolerance);
                }
            }
        }