このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1311089619/909
#  [1] 授業単元:プログラム概論 
#  [2] 問題文(含コード&リンク): 
#    多角形を中心座標に対し上下反転させる関数を作成しなさい。この関数の引数は、多角形のデータが 
#    収められた構造体のアドレスをとる。また、上下反転された座標は元の頂点座標に格納する変数に再代入される。 
#  

'多角形を中心座標に対し上下反転させる関数を作成しなさい。この関数の引数は、多角形のデータが収められた構造体のアドレスをとる。また、上下反転された座標は元の頂点座標に格納する変数に再代入される'(_多角形の頂点座標ならび,_中心座標に対して上下反転された多角形座標ならび) :-
        中心y座標を得る(_多角形の頂点座標ならび,_中心y座標),
        上限反転座標ならび(_中心y座標,_多角形の頂点座標ならび,_中心座標に対して上下反転された多角形座標ならび).

上限反転座標ならび(_,_,[],[]) :- !.
上限反転座標ならび(_中心y座標,[(_x座標,_y座標)|R1],[(_x座標,_y座標_2)|R2]) :-
         _y座標 >= _中心y座標,
         _y座標_2 is _y座標 - (_y座標-_中心y座標) * 2,
         上限反転座標ならび(_中心x座標,_中心y座標,R1,R2),!.
上限反転座標ならび(_中心y座標,[(_x座標,_y座標)|R1],[(_x座標,_y座標_2)|R2]) :-
         _y座標 < _中心y座標,
         _y座標_2 is _y座標 + (_中心y座標-_y座標) * 2,
         上限反転座標ならび(_中心x座標,_中心y座標,R1,R2),!.


中心y座標を得る(_多角形の頂点座標ならび,_中心y座標) :-
        findavg(_y座標,(
                    append(_,[(_,_y座標)|_],_多角形の頂点座標ならび)),
               _中心のy座標),!.