@@ -226,7 +226,7 @@ public static void BooleanOp(ClipType clipType, @Nullable PathsD subject, @Nulla
226226 * @see #InflatePaths(PathsD, double, JoinType, EndType, double, double, int)
227227 */
228228 public static Paths64 InflatePaths (Paths64 paths , double delta , JoinType joinType , EndType endType ) {
229- return InflatePaths (paths , delta , joinType , endType , 2.0 , 0.25 );
229+ return InflatePaths (paths , delta , joinType , endType , 2.0 , 0.0 );
230230 }
231231
232232 /**
@@ -244,14 +244,14 @@ public static Paths64 InflatePaths(Paths64 paths, double delta, JoinType joinTyp
244244 * @see #InflatePaths(PathsD, double, JoinType, EndType, double, double, int)
245245 */
246246 public static PathsD InflatePaths (PathsD paths , double delta , JoinType joinType , EndType endType , double miterLimit ) {
247- return InflatePaths (paths , delta , joinType , endType , miterLimit , 0.25 , 8 );
247+ return InflatePaths (paths , delta , joinType , endType , miterLimit , 0.0 , 8 );
248248 }
249249
250250 /**
251251 * @see #InflatePaths(PathsD, double, JoinType, EndType, double, double, int)
252252 */
253253 public static PathsD InflatePaths (PathsD paths , double delta , JoinType joinType , EndType endType ) {
254- return InflatePaths (paths , delta , joinType , endType , 2.0 , 0.25 , 8 );
254+ return InflatePaths (paths , delta , joinType , endType , 2.0 , 0.0 , 8 );
255255 }
256256
257257 /**
@@ -992,29 +992,33 @@ public static double PerpendicDistFromLineSqrd(Point64 pt, Point64 line1, Point6
992992 }
993993
994994 public static void RDP (Path64 path , int begin , int end , double epsSqrd , List <Boolean > flags ) {
995- int idx = 0 ;
996- double maxD = 0 ;
997- while (end > begin && path .get (begin ).equals (path .get (end ))) {
998- flags .set (end --, false );
999- }
1000- for (int i = begin + 1 ; i < end ; ++i ) {
1001- // PerpendicDistFromLineSqrd - avoids expensive Sqrt()
1002- double d = PerpendicDistFromLineSqrd (path .get (i ), path .get (begin ), path .get (end ));
1003- if (d <= maxD ) {
995+ while (true ) {
996+ int idx = 0 ;
997+ double maxD = 0 ;
998+ while (end > begin && path .get (begin ).equals (path .get (end ))) {
999+ flags .set (end --, false );
1000+ }
1001+ for (int i = begin + 1 ; i < end ; ++i ) {
1002+ // PerpendicDistFromLineSqrd - avoids expensive Sqrt()
1003+ double d = PerpendicDistFromLineSqrd (path .get (i ), path .get (begin ), path .get (end ));
1004+ if (d <= maxD ) {
1005+ continue ;
1006+ }
1007+ maxD = d ;
1008+ idx = i ;
1009+ }
1010+ if (maxD <= epsSqrd ) {
1011+ return ;
1012+ }
1013+ flags .set (idx , true );
1014+ if (idx > begin + 1 ) {
1015+ RDP (path , begin , idx , epsSqrd , flags );
1016+ }
1017+ if (idx < end - 1 ) {
1018+ begin = idx ;
10041019 continue ;
10051020 }
1006- maxD = d ;
1007- idx = i ;
1008- }
1009- if (maxD <= epsSqrd ) {
1010- return ;
1011- }
1012- flags .set (idx , true );
1013- if (idx > begin + 1 ) {
1014- RDP (path , begin , idx , epsSqrd , flags );
1015- }
1016- if (idx < end - 1 ) {
1017- RDP (path , idx , end , epsSqrd , flags );
1021+ break ;
10181022 }
10191023 }
10201024
@@ -1081,29 +1085,33 @@ public static Paths64 RamerDouglasPeucker(Paths64 paths, double epsilon) {
10811085 }
10821086
10831087 public static void RDP (PathD path , int begin , int end , double epsSqrd , List <Boolean > flags ) {
1084- int idx = 0 ;
1085- double maxD = 0 ;
1086- while (end > begin && path .get (begin ).equals (path .get (end ))) {
1087- flags .set (end --, false );
1088- }
1089- for (int i = begin + 1 ; i < end ; ++i ) {
1090- // PerpendicDistFromLineSqrd - avoids expensive Sqrt()
1091- double d = PerpendicDistFromLineSqrd (path .get (i ), path .get (begin ), path .get (end ));
1092- if (d <= maxD ) {
1088+ while (true ) {
1089+ int idx = 0 ;
1090+ double maxD = 0 ;
1091+ while (end > begin && path .get (begin ).equals (path .get (end ))) {
1092+ flags .set (end --, false );
1093+ }
1094+ for (int i = begin + 1 ; i < end ; ++i ) {
1095+ // PerpendicDistFromLineSqrd - avoids expensive Sqrt()
1096+ double d = PerpendicDistFromLineSqrd (path .get (i ), path .get (begin ), path .get (end ));
1097+ if (d <= maxD ) {
1098+ continue ;
1099+ }
1100+ maxD = d ;
1101+ idx = i ;
1102+ }
1103+ if (maxD <= epsSqrd ) {
1104+ return ;
1105+ }
1106+ flags .set (idx , true );
1107+ if (idx > begin + 1 ) {
1108+ RDP (path , begin , idx , epsSqrd , flags );
1109+ }
1110+ if (idx < end - 1 ) {
1111+ begin = idx ;
10931112 continue ;
10941113 }
1095- maxD = d ;
1096- idx = i ;
1097- }
1098- if (maxD <= epsSqrd ) {
1099- return ;
1100- }
1101- flags .set (idx , true );
1102- if (idx > begin + 1 ) {
1103- RDP (path , begin , idx , epsSqrd , flags );
1104- }
1105- if (idx < end - 1 ) {
1106- RDP (path , idx , end , epsSqrd , flags );
1114+ break ;
11071115 }
11081116 }
11091117
0 commit comments