// Obliczenie wielkości obróconego obrazu. 
// W tym celu, w pierwszej kolejności przyjmujemy założenie, że lewy dolny wierzchołek to punkt o współrzędnych (0,0). 
// Następnie obliczamy pozostałe trzy wierzchołki. 
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 wartości minimum i maksimum współrzędnych wierzchołków.
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 szerokości i wysokości obróconego obrazu. 
int rotatedW = (int) Math.floor(Math.abs(maxx - minx)); 
int rotatedH = (int) Math.floor(Math.abs(maxy - miny)); 
