1212 */
1313abstract class AbstractSimplify <T > {
1414
15- private T [] sampleArray ;
16-
17- protected AbstractSimplify (T [] sampleArray ) {
18- this .sampleArray = sampleArray ;
15+ protected AbstractSimplify () {
1916 }
2017
2118 /**
@@ -27,12 +24,15 @@ protected AbstractSimplify(T[] sampleArray) {
2724 * applying Douglas-Peucker (should be a bit faster)
2825 * @return simplified list of points
2926 */
30- public T [] simplify (T [] points ,
27+ public List < T > simplify (List < T > points ,
3128 double tolerance ,
3229 boolean highestQuality ) {
3330
34- if (points == null || points .length <= 2 ) {
35- return points ;
31+ if (points == null ) {
32+ throw new IllegalArgumentException ();
33+ }
34+ if (points .size () <= 2 ) {
35+ return new ArrayList <>(points );
3636 }
3737
3838 double sqTolerance = tolerance * tolerance ;
@@ -46,15 +46,15 @@ public T[] simplify(T[] points,
4646 return points ;
4747 }
4848
49- T [] simplifyRadialDistance (T [] points , double sqTolerance ) {
49+ List < T > simplifyRadialDistance (List < T > points , double sqTolerance ) {
5050 T point = null ;
51- T prevPoint = points [ 0 ] ;
51+ T prevPoint = points . get ( 0 ) ;
5252
53- List <T > newPoints = new ArrayList <T >();
53+ List <T > newPoints = new ArrayList <>();
5454 newPoints .add (prevPoint );
5555
56- for (int i = 1 ; i < points .length ; ++i ) {
57- point = points [ i ] ;
56+ for (int i = 1 ; i < points .size () ; ++i ) {
57+ point = points . get ( i ) ;
5858
5959 if (getSquareDistance (point , prevPoint ) > sqTolerance ) {
6060 newPoints .add (point );
@@ -66,7 +66,7 @@ T[] simplifyRadialDistance(T[] points, double sqTolerance) {
6666 newPoints .add (point );
6767 }
6868
69- return newPoints . toArray ( sampleArray ) ;
69+ return newPoints ;
7070 }
7171
7272 private static class Range {
@@ -79,14 +79,14 @@ private Range(int first, int last) {
7979 int last ;
8080 }
8181
82- T [] simplifyDouglasPeucker (T [] points , double sqTolerance ) {
82+ List < T > simplifyDouglasPeucker (List < T > points , double sqTolerance ) {
8383
84- BitSet bitSet = new BitSet (points .length );
84+ BitSet bitSet = new BitSet (points .size () );
8585 bitSet .set (0 );
86- bitSet .set (points .length - 1 );
86+ bitSet .set (points .size () - 1 );
8787
88- List <Range > stack = new ArrayList <Range >();
89- stack .add (new Range (0 , points .length - 1 ));
88+ List <Range > stack = new ArrayList <>();
89+ stack .add (new Range (0 , points .size () - 1 ));
9090
9191 while (!stack .isEmpty ()) {
9292 Range range = stack .remove (stack .size () - 1 );
@@ -96,7 +96,7 @@ T[] simplifyDouglasPeucker(T[] points, double sqTolerance) {
9696
9797 // find index of point with maximum square distance from first and last point
9898 for (int i = range .first + 1 ; i < range .last ; ++i ) {
99- double sqDist = getSquareSegmentDistance (points [ i ] , points [ range .first ] , points [ range .last ] );
99+ double sqDist = getSquareSegmentDistance (points . get ( i ) , points . get ( range .first ) , points . get ( range .last ) );
100100
101101 if (sqDist > maxSqDist ) {
102102 index = i ;
@@ -112,12 +112,12 @@ T[] simplifyDouglasPeucker(T[] points, double sqTolerance) {
112112 }
113113 }
114114
115- List <T > newPoints = new ArrayList <T >(bitSet .cardinality ());
115+ List <T > newPoints = new ArrayList <>(bitSet .cardinality ());
116116 for (int index = bitSet .nextSetBit (0 ); index >= 0 ; index = bitSet .nextSetBit (index + 1 )) {
117- newPoints .add (points [ index ] );
117+ newPoints .add (points . get ( index ) );
118118 }
119119
120- return newPoints . toArray ( sampleArray ) ;
120+ return newPoints ;
121121 }
122122
123123
0 commit comments