plduhoux
2/22/2018 - 9:47 PM

rectangleRotation

int rectangleRotation(int a, int b) {
    int nb = 0;
    int max = Math.max(a, b);
    for (int i = -max; i <= max; i++) {
        for (int j = -max; j <= max; j++) {
            double[] unr = rotate(i, j, Math.PI * -45 / 180);
            if (unr[0] >= -a / 2 && unr[0] <= a / 2 && unr[1] >= -b / 2 && unr[1] <= b / 2) 
                nb++;
        }
    }
    return nb;
}

double[] rotate(int x, int y, double ang) {
    double xp = x * Math.cos(ang) - y * Math.sin(ang);
    double yp = x * Math.sin(ang) + y * Math.cos(ang);
    return new double[] {xp, yp};
}