このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1320365280/398
#  [1] 授業単元: 画像処理 
#  [2] 問題文(含コード&リンク): 
#  アフィン変換で画像を変換せよ。ただし回転の中心は画像の中心であるである 
#  http://ime.nu/codepad.org/i8K01zBM 
#  ここまでできたのですが画像の中心で回転してくれません。 
#  

'100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(_表,_中心X座標,_中心Y座標,_回転角度) :-
        回転変換行列(_回転角度,_回転変換行列),
        '100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(40,40,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列).

'100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(X,Y,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列) :-
        X > 60,Y = 60,!.
'100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(X,Y,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列) :-
        X > 60,
        \+(Y = 60),
        Y_2 is Y + 1,
        '100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(40,Y_2,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列),!.
'100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(X,Y,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列)  :-
        中心を原点移動した座標(X,Y,X_1,Y_1),
        行列の掛算([[X_1,Y_1]],_回転変換行列,[[_x,_y]]),
        平行移動(_x,_y,_x_1,_y_1),
        要素の単一化(_表,X,Y,_x_1,_y_1),
        X_2 is X + 1,
        '100 * 100 の要素の中の中心からx軸方向+-10要素、y軸方向+-10要素をアフィン変換で回転する'(X_2,Y,_表,_中心X座標,_中心Y座標,_回転角度,_回転変換行列).

中心を原点移動した座標(X,Y,X_1,Y_1) :-
        X_1 is X - 50,
        Y_1 is Y - 50.

回転変換行列(_回転角度,[[U11,U12,U21,U22]]) :-
        U_11 is cos(_回転角度),
        U_12 is -1 * sin(_回転角度),
        U_21 is sin(_回転角度),
        U_22 is cos(_回転角度),!.
        
要素の単一化(_表,X,Y,_x_1,_y_1) :-
        要素値(_表,_x_1,_y_1,_要素),
        var(_要素),
        要素値(_表,X,Y,_要素).
要素の単一化(_,_,_,_,_).

要素値(_表,X,Y,_値) :-
        nth1(Y,_表,L),
        nth1(X,L,_値).

平行移動(_x,_y,_x_1,_y_1) :-
        _x_1 is truncate(floor(_x + 80 + 0.5)),
        _y_1 is truncate(floor(_y + 80 + 0.5)),!.