Mega Code Archive

 
Categories / Android / 2D Graphics
 

Smooth Line

// Created by plusminus on 13:24:05 - 21.09.2008 //package org.andnav2.osm.util; import java.util.Comparator; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; class Util {   public static final String DEBUGTAG = "OPENSTREETMAP";   public static final String BASEPATH_ON_EXTERNAL_MEDIA = "andnav2/";   public static final String SDCARD_SAVEDROUTES_PATH = "routes/";   public static final String SDCARD_SAVEDTRACES_PATH = "traces/";   public static final String SDCARD_SKYHOOKCACHE_PATH = "skyhookcache/";   public static final String SDCARD_TILE_PATH = "tiles/";   public static final int NOT_SET = Integer.MIN_VALUE;   public static final int Y = 0;   public static final int X = 1;   /**    *     * @param pOrderedPoints Ordered means that the points are placed as if they are a line.    */   public static void smoothLine(final Set<ValuePair> pPointsInLineorder){     ValuePair prev = null;     ValuePair cur;     /* We want only uniqe new values. */     final Set<ValuePair> newPoints = new TreeSet<ValuePair>(new Comparator<ValuePair>(){       @Override       public int compare(final ValuePair a, final ValuePair b) {         return a.compareTo(b);       }     });     for(final Iterator<ValuePair> lineIterator = pPointsInLineorder.iterator(); lineIterator.hasNext(); ) {       cur = lineIterator.next();       if(prev != null){         final int difA = cur.a - prev.a;         final int difB = cur.b - prev.b;         /* Check if we have a diagonal jump, like: (See X's)          *           *      X----          * ----X          *           * */         if(Math.abs(difA) == 1 && Math.abs(difB) == 1){           /* Add two new points (See O's)            *             *     0X----            * ----X0            *             */           newPoints.add(new ValuePair(cur.a, prev.b));           newPoints.add(new ValuePair(prev.a, cur.b));         }       }       prev = cur;     }     pPointsInLineorder.addAll(newPoints);   }} class ValuePair implements Comparable<ValuePair>{   //             // Constants   //             //             // Fields   //             final int a,b;   //             // Constructors   //             public ValuePair(final int[] reuse) {     this.a = reuse[0];     this.b = reuse[1];   }   public ValuePair(final int pA, final int pB) {     this.a = pA;     this.b = pB;   }   //             // Getter & Setter   //             public int[] toArray() {     return new int[]{this.a,this.b};   }   public int getValueA() {     return this.a;   }   public int getValueB() {     return this.b;   }   //             // Methods from SuperClass/Interfaces   //             @Override   public boolean equals(final Object o) {     return o instanceof ValuePair     && this.a == ((ValuePair)o).a     && this.b == ((ValuePair)o).b;   }   @Override   public int compareTo(final ValuePair another) {     if(this.a != another.a) {       return this.a - another.a;     } else if(this.b != another.b) {       return this.b - another.b;     } else {       return 0;     }   }   //             // Methods   //           }