public static boolean isIntersect(Vector A1, Vector A2, Vector B1, Vector B2) { Vector A = diff(A1, A2); Vector B = diff(B2, B1); Vector C = diff(B2, A2); double determinant = A.getA() * B.getB() - A.getB() * B.getA(); double d1 = C.getA() * B.getB() - C.getB() * B.getA(); double d2 = A.getA() * C.getB() - A.getB() * C.getA(); if (determinant == 0 && d1 == 0 && d2 == 0) return true; if (determinant == 0) return false; double k1 = d1 / determinant; double k2 = d2 / determinant; return k1 >= 0 && k1 <= 1 && k2 >= 0 && k2 <= 1; }
public static double length(Vector vector) { return Math.sqrt(vector.getA() * vector.getA() + vector.getB() * vector.getB()); }
public static Vector diff(Vector v1, Vector v2) { return new Vector(v1.getA() - v2.getA(), v1.getB() - v2.getB()); }
public static Vector normal(Vector v) { return new Vector(-v.getB(), v.getA()); }
public static double vectorProd(Vector v1, Vector v2) { return v1.getA() * v2.getB() - v1.getB() * v2.getA(); }
public static double scalarProd(Vector v1, Vector v2) { return v1.getA() * v2.getA() + v1.getB() * v2.getB(); }
public static Vector sum(Vector meToEnemy, Vector me) { return new Vector(meToEnemy.getA() + me.getA(), meToEnemy.getB() + me.getB()); }
public static Vector prod(Vector vector, double scalar) { return new Vector(vector.getA() * scalar, vector.getB() * scalar); }
public static Vector rotate(Vector vector, double angle) { double a = vector.getA(); double b = vector.getB(); return new Vector(a * cos(angle) - b * sin(angle), a * sin(angle) + b * cos(angle)); }