package net.coding.program.login.auth.qrscan; /** * Created by chenchao on 15/7/7. */ public class ResultPoint { private final float x; private final float y; public ResultPoint(float x, float y) { this.x = x; this.y = y; } public static void orderBestPatterns(ResultPoint[] patterns) { float zeroOneDistance = distance(patterns[0], patterns[1]); float oneTwoDistance = distance(patterns[1], patterns[2]); float zeroTwoDistance = distance(patterns[0], patterns[2]); ResultPoint pointA; ResultPoint pointB; ResultPoint pointC; if (oneTwoDistance >= zeroOneDistance && oneTwoDistance >= zeroTwoDistance) { pointB = patterns[0]; pointA = patterns[1]; pointC = patterns[2]; } else if (zeroTwoDistance >= oneTwoDistance && zeroTwoDistance >= zeroOneDistance) { pointB = patterns[1]; pointA = patterns[0]; pointC = patterns[2]; } else { pointB = patterns[2]; pointA = patterns[0]; pointC = patterns[1]; } if (crossProductZ(pointA, pointB, pointC) < 0.0F) { ResultPoint temp = pointA; pointA = pointC; pointC = temp; } patterns[0] = pointA; patterns[1] = pointB; patterns[2] = pointC; } public static float distance(ResultPoint pattern1, ResultPoint pattern2) { float xDiff = pattern1.x - pattern2.x; float yDiff = pattern1.y - pattern2.y; return (float) Math.sqrt((double) (xDiff * xDiff + yDiff * yDiff)); } private static float crossProductZ(ResultPoint pointA, ResultPoint pointB, ResultPoint pointC) { float bX = pointB.x; float bY = pointB.y; return (pointC.x - bX) * (pointA.y - bY) - (pointC.y - bY) * (pointA.x - bX); } public final float getX() { return this.x; } public final float getY() { return this.y; } public boolean equals(Object other) { if (!(other instanceof ResultPoint)) { return false; } else { ResultPoint otherPoint = (ResultPoint) other; return this.x == otherPoint.x && this.y == otherPoint.y; } } public int hashCode() { return 31 * Float.floatToIntBits(this.x) + Float.floatToIntBits(this.y); } public String toString() { StringBuilder result = new StringBuilder(25); result.append('('); result.append(this.x); result.append(','); result.append(this.y); result.append(')'); return result.toString(); } }