指定したサイズ枠におさまるよう画像をcropしてresizseするときの計算

ありがちなんだが。
画像を画面に並べたいときって、1枚あたりの画像がこの枠にいい感じにおさまればいいな、ってのがある。
つまりサイズ枠を指定して、そこにおさまるように余分な部分をcropして、リサイズする。

たとえば、200x300の画像があったとして、それを100x100の枠で表示させたい。
すると、200x200になるようにcropかけて、それを100x100にリサイズするわけだ。

これをうまく計算するにはどうしたらよいかちょっと考えてみた。
計算部分だけ。

	public static void crop(int aimW, int aimH, int orgW, int orgH) {
		double wRatio = (double )aimW/(double )orgW;
		double hRatio = (double )aimH/(double )orgH;

		int w = orgW;
		int h = orgH;
		double ratio = 1.0D;
		if(wRatio < hRatio) {
			w = (int)(((double )aimW)/hRatio);
			ratio = hRatio;
		} else {
			h = (int)(((double )aimH)/wRatio);
			ratio = wRatio;
		}
		System.out.print("aim:"+aimW+","+aimH);
		System.out.print(" crop:"+w + "," +h);
		System.out.println(" scale:"+w*ratio + "," +h*ratio);
	}

aimは指定サイズ、orgがオリジナルサイズ。
widthとheightそれぞれで指定とオリジナルの比をとってみると、上のやりかただと比が小さい方を切り取ればよい。
切り取ってどのぐらいにすればよいかは、比が大きい方で指定サイズをわると出る。

テストしてみよう。

	public static void main(String[] args) {
		crop(100, 100, 200, 300);
		crop(100, 100, 50, 28);
		crop(100, 100, 50, 80);
		crop(230, 120, 950, 80);
		crop(800, 200, 100,200);
		crop(280, 300, 1000,400);
	}
aim:100,100 crop:200,200 scale:100.0,100.0
aim:100,100 crop:28,28 scale:100.0,100.0
aim:100,100 crop:50,50 scale:100.0,100.0
aim:230,120 crop:153,80 scale:229.5,120.0
aim:800,200 crop:100,25 scale:800.0,200.0
aim:280,300 crop:373,400 scale:279.75,300.0

うん、いけてそうな感じがする。
もっといい方法あるかな?