/* package whatever; // don't place package name! */
import java.util.*;
import java.lang.*;
import java.io.*;
/* Name of the class has to be "Main" only if the class is public. */
class Ideone
{
public static final double PI = 3.14159;
public static final double TOLERANCE = 0.0001;
{
double boxWidth = 13;
double boxHeight = 8;
double tileWidth = 14;
double tileHeight = 1;
double radians = getAngle(boxWidth, tileWidth, tileHeight);
if(radians < 0){
System.
out.
println("No angle found to fit!"); }
double y1
= Math.
sin(radians
) * tileWidth
; double y2
= Math.
sin((PI
* 0.5) - radians
) * tileHeight
; int numTiles = 0;
if(y1 <= boxHeight){
numTiles = (int)((boxHeight - y1) / y2);
}
double degrees = radians * 180 / PI; //convert to degrees
System.
out.
println("Rotated " + degrees
+ " degrees"); System.
out.
println("y1 = " + y1
); System.
out.
println("y2 = " + y2
); System.
out.
println("numTiles = " + numTiles
); }
// boxWidth, tileWidth, tileHeight
public static double getAngle(double bw, double tw, double th){
double maxAngle = PI * 0.25; // 45 degrees, any more would be taller than wide
double angle = maxAngle * 0.5; // start in the middle
double angleDelta = angle * 0.5; // amount to change;
int count = 0;
while(count++ < 100){
double rotatedWidth
= tw
* Math.
cos(angle
) + th
* Math.
sin(angle
); double err = rotatedWidth - bw;
if(Math.
abs(err
) < TOLERANCE
){ return angle;
} else if(err < 0){
angle -= angleDelta;
} else {
angle += angleDelta;
}
angleDelta *= 0.5;
}
return -1; // found no good angle in 100 attempts
}
}
LyogcGFja2FnZSB3aGF0ZXZlcjsgLy8gZG9uJ3QgcGxhY2UgcGFja2FnZSBuYW1lISAqLwoKaW1wb3J0IGphdmEudXRpbC4qOwppbXBvcnQgamF2YS5sYW5nLio7CmltcG9ydCBqYXZhLmlvLio7CgovKiBOYW1lIG9mIHRoZSBjbGFzcyBoYXMgdG8gYmUgIk1haW4iIG9ubHkgaWYgdGhlIGNsYXNzIGlzIHB1YmxpYy4gKi8KY2xhc3MgSWRlb25lCnsKCQoJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgUEkgPSAzLjE0MTU5OwoJcHVibGljIHN0YXRpYyBmaW5hbCBkb3VibGUgVE9MRVJBTkNFID0gMC4wMDAxOwoKCXB1YmxpYyBzdGF0aWMgdm9pZCBtYWluIChTdHJpbmdbXSBhcmdzKSB0aHJvd3MgamF2YS5sYW5nLkV4Y2VwdGlvbgoJewoJCWRvdWJsZSBib3hXaWR0aCA9IDEzOwoJCWRvdWJsZSBib3hIZWlnaHQgPSA4OwoJCWRvdWJsZSB0aWxlV2lkdGggPSAxNDsKCQlkb3VibGUgdGlsZUhlaWdodCA9IDE7CgkJCgkJZG91YmxlIHJhZGlhbnMgPSBnZXRBbmdsZShib3hXaWR0aCwgdGlsZVdpZHRoLCB0aWxlSGVpZ2h0KTsKCQlpZihyYWRpYW5zIDwgMCl7CgkJCVN5c3RlbS5vdXQucHJpbnRsbigiTm8gYW5nbGUgZm91bmQgdG8gZml0ISIpOwoJCQlTeXN0ZW0uZXhpdCgwKTsKCQl9CgkJCgkJZG91YmxlIHkxID0gTWF0aC5zaW4ocmFkaWFucykgKiB0aWxlV2lkdGg7CgkJZG91YmxlIHkyID0gTWF0aC5zaW4oKFBJICogMC41KSAtIHJhZGlhbnMpICogdGlsZUhlaWdodDsKCQlpbnQgbnVtVGlsZXMgPSAwOwoJCWlmKHkxIDw9IGJveEhlaWdodCl7CgkJCW51bVRpbGVzID0gKGludCkoKGJveEhlaWdodCAtIHkxKSAvIHkyKTsKCQl9CgkJCgkJZG91YmxlIGRlZ3JlZXMgPSByYWRpYW5zICogMTgwIC8gUEk7IC8vY29udmVydCB0byBkZWdyZWVzCgkJU3lzdGVtLm91dC5wcmludGxuKCJSb3RhdGVkICIgKyBkZWdyZWVzICsgIiBkZWdyZWVzIik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJ5MSA9ICIgKyB5MSk7CgkJU3lzdGVtLm91dC5wcmludGxuKCJ5MiA9ICIgKyB5Mik7CgkJU3lzdGVtLm91dC5wcmludGxuKCJudW1UaWxlcyA9ICIgKyBudW1UaWxlcyk7Cgl9CgkKCS8vIGJveFdpZHRoLCB0aWxlV2lkdGgsIHRpbGVIZWlnaHQKCXB1YmxpYyBzdGF0aWMgZG91YmxlIGdldEFuZ2xlKGRvdWJsZSBidywgZG91YmxlIHR3LCBkb3VibGUgdGgpewoJCWRvdWJsZSBtYXhBbmdsZSA9IFBJICogMC4yNTsgLy8gNDUgZGVncmVlcywgYW55IG1vcmUgd291bGQgYmUgdGFsbGVyIHRoYW4gd2lkZQoJCWRvdWJsZSBhbmdsZSA9IG1heEFuZ2xlICogMC41OyAvLyBzdGFydCBpbiB0aGUgbWlkZGxlCgkJZG91YmxlIGFuZ2xlRGVsdGEgPSBhbmdsZSAqIDAuNTsgLy8gYW1vdW50IHRvIGNoYW5nZTsKCQlpbnQgY291bnQgPSAwOwoJCXdoaWxlKGNvdW50KysgPCAxMDApewoJCQlkb3VibGUgcm90YXRlZFdpZHRoID0gdHcgKiBNYXRoLmNvcyhhbmdsZSkgKyB0aCAqIE1hdGguc2luKGFuZ2xlKTsKCQkJZG91YmxlIGVyciA9IHJvdGF0ZWRXaWR0aCAtIGJ3OwoJCQlpZihNYXRoLmFicyhlcnIpIDwgVE9MRVJBTkNFKXsKCQkJCXJldHVybiBhbmdsZTsKCQkJfSBlbHNlIGlmKGVyciA8IDApewoJCQkJYW5nbGUgLT0gYW5nbGVEZWx0YTsKCQkJfSBlbHNlIHsKCQkJCWFuZ2xlICs9IGFuZ2xlRGVsdGE7CgkJCX0KCQkJYW5nbGVEZWx0YSAqPSAwLjU7CgkJfQoJCXJldHVybiAtMTsgLy8gZm91bmQgbm8gZ29vZCBhbmdsZSBpbiAxMDAgYXR0ZW1wdHMKCX0KfQ==