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ď č. 1Operá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š.