2012-05-02 39 views
-1

可能重複:
Rotate Image .pbm Haskell旋轉矩陣PBMfile哈斯克爾

我需要幫助有關Haskell的旋轉矩陣

我有2個數據類型:

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

和我的功能得到:

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

其中'x'和'y'分別是柱和行的數量(也許可以幫助做功能)。

例如:

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

我嘗試使用具有反向和轉置的組合旋轉90°的左側,但圖像的結果是錯誤的。

我嘗試

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

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

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

旋轉矩陣,但不起作用。

的結果是一樣的東西

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

+0

「圖像結果是錯誤的......」但以什麼方式錯了?嘗試用「我做了X,期待Y,但是Z發生了」的形式來表達你的問題。「 –

+0

我添加說明,幫助我們瞭解 – user495943

+0

不僅僅爲了我們瞭解,還爲您測試您的功能。將kunwoo32的解決方案應用於您自己的例子的結果是什麼? –

回答

2

移調操作反向操作之前應該發生。嘗試

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

此外,切換旋轉圖像的尺寸。

+0

我嘗試,並且無法正常工作..我得到的圖像有一條對角線,將它分開。謝謝 – user495943

+0

在你的問題的例子中,你的矩陣似乎是順時針旋轉的。那是你要的嗎? – kunwoo32

+0

是的,要旋轉圖像 – user495943

1

您還需要考慮(map reverse),而不僅僅是transposereverse。我認爲((map reverse) . transpose)做你想做的。

+0

不工作的男人,我嘗試和和真的很接近,但是是顛倒的 – user495943