// Obliczenie wielkoci obrconego obrazu. 
// W tym celu, w pierwszej kolejnoci przyjmujemy zaoenie, e lewy dolny wierzchoek to punkt o wsprzdnych (0,0). 
// Nastpnie obliczamy pozostae trzy wierzchoki. 
double point1x = originalW * Math.cos(angle); 
double point1y = originalW * Math.sin(angle); 
double point2x = -originalH * Math.sin(angle); 
double point2y = originalH * Math.cos(angle); 
double point3x = originalW * Math.cos(angle) - originalH * Math.sin(angle); 
double point3y = originalW * Math.sin(angle) + originalH * Math.cos(angle); 

// Kolejnym krokiem jest znalezienie wartoci minimum i maksimum wsprzdnych wierzchokw.
double minx = Math.min( 0, Math.min(point1x , Math.min(point2x , point3x))); 
double miny = Math.min( 0, Math.min(point1y , Math.min(point2y , point3y))); 
double maxx = Math.max( 0, Math.max(point1x , Math.max(point2x , point3x))); 
double maxy = Math.max( 0, Math.max(point1y , Math.max(point2y , point3y))); 

// Ostatnim krokiem jest obliczenie faktycznej szerokoci i wysokoci obrconego obrazu. 
int rotatedW = (int) Math.floor(Math.abs(maxx - minx)); 
int rotatedH = (int) Math.floor(Math.abs(maxy - miny)); 
