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); }
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); } } }