FilterDupsAndColinear function
List<Vector2>
FilterDupsAndColinear(
- List<Vector2> contour
)
Implementation
List<VM.Vector2> FilterDupsAndColinear(final List<VM.Vector2> contour) {
List<VM.Vector2> out = <VM.Vector2>[];
final cl = contour.length;
out.add(contour[0]);
for (int i = 1; i < cl - 1; ++i) {
final VM.Vector2 v0 = out.last;
final VM.Vector2 v1 = contour[i];
if (v0 == v1) continue;
final VM.Vector2 v2 = contour[i + 1];
if (Colinear(v0, v1, v2)) continue;
out.add(v1);
}
VM.Vector2 v0 = out.last;
VM.Vector2 v1 = contour.last;
final VM.Vector2 v2 = out.first;
if (v1 == v2) {
v1 = out.removeLast();
v0 = out.last;
}
if (v0 == v1) {
v1 = out.removeLast();
v0 = out.last;
}
// at this point v0 != v1 != v2
if (!Colinear(v0, v1, v2)) {
out.add(v1);
}
return out;
}