このディレクトリの索引

座標の回転してから移動(_回転角度,_移動X軸距離,_移動Y軸距離,X,Y,_x,_y) :-
        座標の回転(_回転角度,X,Y,_x2,_y2),
        _x is _x2 + _移動X軸距離,
        _y is _y2 + _移動Y軸距離.

座標を移動してから回転(_回転角度,_移動X軸距離,_移動Y軸距離,X,Y,_x,_y) :-
        X2 is X + _移動X軸距離,
        Y2 is Y + _移動Y軸距離,
        座標の回転(_回転角度,X2,Y2,_x,_y).

座標の回転(_回転角度,X,Y,_x,_y) :-
        変換正方行列(回転,_回転角度,L),
        m_mult([[Y,X]],L,[[_y,_x]]).        

変換正方行列(回転,V,[[A,B],[C,D]]) :-
        \+(var(V)),
        R is pi * V / 180,
        A is cos(R),
        B is (-1) * sin(R),
        C is sin(R),
        D = A.
変換正方行列(回転,90,[[0,-1],[1,0]]).
変換正方行列(回転,180,[[-1,0],[0,-1]]).
変換正方行列(回転,270,[[0,1],[-1,0]]).
変換正方行列(回転,-90,[[0,1],[-1,0]]).
変換正方行列(回転,-180,[[-1,0],[0,-1]]).
変換正方行列(回転,-270,[[0,-1],[1,0]]).

行列の積(L1,L2,X) :-
         行列の転置(L2,L4),
         行列の積_1(L1,L4,X).
行列の積_1([],_,[]) :- !.
行列の積_1([A|R1],L,[S1|R3]) :-
         行列の積_2(A,L,S1),
         行列の積_1(R1,L,R3) .

行列の積_2(_,[],[]) :- !.
行列の積_2(A,[B|R2],[C|R3]) :-
         行列の積_3(A,B,C),
         行列の積_2(A,R2,R3).

行列の積_3([],[],0) :- !.
行列の積_3([A|R1],[B|R2],S) :-
         S1 is A * B,
         行列の積_3(R1,R2,S2),
         S is S1 + S2.

行列の転置([],[],[]) :- !.
行列の転置([[A|R]|R1],[A|R2],[R|R3]) :-
         行列の転置(R1,R2,R3).

行列の転置([[]|_],[]) :- !.
行列の転置(L,[B|R1]) :-
         行列の転置(L,B,R2),
         行列の転置(R2,R1),!.