Example #1
0
 /**
  * Orders the stroke list such that connected strokes are in order of consistency (not time)
  *
  * @param list stroke list
  * @return re-ordered stroke list
  */
 private List<Stroke> orderStrokes(List<Stroke> list) {
   if (list.size() < 3) {
     Collections.sort(list);
     return list;
   }
   List<Stroke> orderedList = new ArrayList<Stroke>();
   orderedList.add(list.get(0));
   list.remove(0);
   while (list.size() > 0) {
     Point curr = orderedList.get(orderedList.size() - 1).getLastPoint();
     Point curr2 = orderedList.get(orderedList.size() - 1).getFirstPoint();
     double closest = Double.MAX_VALUE;
     Stroke closestStr = null;
     for (Stroke s : list) {
       double dist1 = curr.distance(s.getFirstPoint());
       double dist2 = curr.distance(s.getLastPoint());
       double dist3 = curr2.distance(s.getFirstPoint());
       double dist4 = curr2.distance(s.getLastPoint());
       if (dist1 < closest) {
         closest = dist1;
         closestStr = s;
       }
       if (dist2 < closest) {
         closest = dist2;
         closestStr = s;
       }
       if (dist3 < closest) {
         closest = dist3;
         closestStr = s;
       }
       if (dist4 < closest) {
         closest = dist4;
         closestStr = s;
       }
     }
     orderedList.add(closestStr);
     list.remove(closestStr);
   }
   return orderedList;
 }