use crate::Point;
pub fn orderBestPatterns<T: Into<Point> + Copy>(patterns: &mut [T; 3]) {
let zeroOneDistance = Point::distance(patterns[0].into(), patterns[1].into());
let oneTwoDistance = Point::distance(patterns[1].into(), patterns[2].into());
let zeroTwoDistance = Point::distance(patterns[0].into(), patterns[2].into());
let (mut pointA, pointB, mut pointC) =
if oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance {
(patterns[1], patterns[0], patterns[2])
} else if zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance {
(patterns[0], patterns[1], patterns[2])
} else {
(patterns[0], patterns[2], patterns[1])
};
if Point::crossProductZ(pointA.into(), pointB.into(), pointC.into()) < 0.0 {
std::mem::swap(&mut pointA, &mut pointC);
}
*patterns = [pointA, pointB, pointC];
}