public boolean collidesWith(Polygon poly2) {
    Vector2D[] poly1Axes = SeparatingAxisTheorem.getSepAxes(this.mPolyVecs);
    Vector2D[] poly2Axes = SeparatingAxisTheorem.getSepAxes(poly2.mPolyVecs);
    ;

    for (int a = 0; a < poly1Axes.length; a++) {
      Vector2D proj1 = SeparatingAxisTheorem.getShapeProjection(poly1Axes[a], this.mPolyVecs);
      Vector2D proj2 = SeparatingAxisTheorem.getShapeProjection(poly1Axes[a], poly2.mPolyVecs);

      if (SeparatingAxisTheorem.projOverlap(proj1, proj2)) {
        return false;
      }
    }

    for (int b = 0; b < poly2Axes.length; b++) {
      Vector2D proj1 = SeparatingAxisTheorem.getShapeProjection(poly2Axes[b], this.mPolyVecs);
      Vector2D proj2 = SeparatingAxisTheorem.getShapeProjection(poly2Axes[b], poly2.mPolyVecs);

      if (SeparatingAxisTheorem.projOverlap(proj1, proj2)) {
        return false;
      }
    }

    return true;
  }
  public MTV getMTV(Polygon poly2) {
    float mainOverlap = Float.MAX_VALUE;
    Vector2D smallest = null;

    Vector2D[] poly1Axes = SeparatingAxisTheorem.getSepAxes(this.mPolyVecs);
    Vector2D[] poly2Axes = SeparatingAxisTheorem.getSepAxes(poly2.mPolyVecs);

    for (int a = 0; a < poly1Axes.length; a++) {
      Vector2D proj1 = SeparatingAxisTheorem.getShapeProjection(poly1Axes[a], this.mPolyVecs);
      Vector2D proj2 = SeparatingAxisTheorem.getShapeProjection(poly1Axes[a], poly2.mPolyVecs);

      if (SeparatingAxisTheorem.projOverlap(proj1, proj2)) {
        return null;
      } else {
        float tempOverlap1 = SeparatingAxisTheorem.getOverlap(proj1, proj2);

        if (tempOverlap1 < mainOverlap) {
          mainOverlap = tempOverlap1;
          smallest = poly1Axes[a];
        }
      }
    }

    for (int b = 0; b < poly2Axes.length; b++) {
      Vector2D proj1 = SeparatingAxisTheorem.getShapeProjection(poly2Axes[b], this.mPolyVecs);
      Vector2D proj2 = SeparatingAxisTheorem.getShapeProjection(poly2Axes[b], poly2.mPolyVecs);

      if (SeparatingAxisTheorem.projOverlap(proj1, proj2)) {
        return null;
      } else {
        float tempOverlap2 = SeparatingAxisTheorem.getOverlap(proj1, proj2);

        if (tempOverlap2 < mainOverlap) {
          mainOverlap = tempOverlap2;
          smallest = poly2Axes[b];
        }
      }
    }

    return new MTV(smallest, mainOverlap);
  }