/** * 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; }