/ Matica rotácie PBMfile Haskell [duplikát] - haskell, matica, rotácia, ppm

Rotačná matica PBMfile Haskell [duplikát] - haskell, matrix, rotation, ppm

Možné duplicitné:
Otočiť obrázok .pbm Haskell

Potrebujem pomoc o rotačnej matici v haskell

Mám 2 typy údajov:

data RGBdata= RGB Int Int Int
data PBMfile= PBM Int Int [[RGBdata]]

a moja funkcia prijíma:

spin :: PBMfile -> PBMfile
spin (PBM x y l) = (PBM x y ((transpose . reverse) l))

kde "x" a "y" je počet stĺpcov a radov (prípadne môžu pomôcť pri vykonávaní funkcie).

napríklad:

(PBM 2 2 [[(RGB 0 255 255),(RGB 255 0 0)],[(RGB 255 255 255),(RGB 255 0 0)]])

Snažím sa otočiť o 90 ° doľava pomocou kombinácií so spätným chodom a transpozíciou, ale výsledok obrázka je nesprávny.

skúsim

spin :: PBMfile -> PBMfile
spin (PBM x y l) = (PBM x y ((reverse . transpose) l))

a

spin :: PBMfile -> PBMfile
spin (PBM x y l) = (PBM x y ((transpose . reverse) l))

a

spin :: PBMfile -> PBMfile
spin (PBM x y l) = (PBM x y (((map reverse) . transpose) l))

otočiť maticu, ale nefunguje.

výsledok je niečo ako

http://imageshack.us/photo/my-images/52/catmc.jpg/

odpovede:

2 pre odpoveď č. 1

Operácia transpozície by sa mala uskutočniť pred reverznou operáciou. vyskúšať

spin (PBM x y l) = (PBM y x ((reverse . transpose) l))

Prepínajú sa aj rozmery otočených obrazov.


1 pre odpoveď č. 2

Musíte tiež zvážiť (map reverse), nie len transpose a reverse, Myslím ((map reverse) . transpose) robí to, čo chceš.