アットウィキロゴ
大久保弘崇
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

大久保弘崇

7章メモ2

最終更新:

hirotakaohkubo

- view
管理者のみ編集可

§7.5

fig9 = writeppm (b2c.udisk) "fig79.ppm" 40 (-3/2,-3/2) (3/2,3/2)
fig10 = writeppm (b2c.udisk.uscaleP 2) "fig710.ppm" 40 (-3/2,-3/2) (3/2,3/2)
 
図7.9は幅3が正しい。
図7.10はさらにdurationというパラメータも不要である。

図7.11
fig711 = writeppm (b2c.swirl 1 vstrip) "fig711.ppm" 50 (-5/2,-5/2) (5/2,5/2)
 
原点からの距離に応じて回転が増えていく。
座標系のY座標が下向きなので、時計回りに回転している。

§7.6 アニメーション

簡単に済ませるために、アニメーションは全てのフレームをwriteppmで出力することで表現する。
時刻durationが指定される。時刻0とdurationの間を動画にする
このとき、何枚の画像にするかを別の引数nで指定する
ファイル名の末尾にaから順に文字を付けて出力する
writeppma :: Anim Colour -> String -> Float -> Point -> Point -> Float -> Int -> IO ()
writeppma canim name size ld ru dur n = sequence_ jobs where
  n1 = n - 1
  is = [0..n1] :: [Int]
  jobs = map one is
  one i = writeppm (canim (i2t i)) (name ++ toEnum (i+97) : ".ppm") size ld ru
  i2t i = dur * fromIntegral i / fromIntegral n1
 
図7.12を再現する。ただし結果は普通のPPMに書き出されるので、これを手動で並べ直した。
fig712 = writeppma (\t -> b2c.fig t) "fig712" 30 (-5/2,-5/2) (5/2,5/2) 2 16 where
  fig = \t -> swirl (t^2) xPos
 
時刻0がなぜこうなったのかはよく判らない。
オリジナルPanは時刻0を決して生成せず、
[ i * duration / k | i<-[1..k] ] の時刻に関してフレームを生成していると推測する。

図7.13は異なる結果になった。
fig713 = writeppma (\t -> b2c.radReg (floor t)) "fig713" 50 (-1,-1) (1,1) 8 9
 
微妙にガタついていたり水平が出ていないのは、計算精度やサンプリング点のとりかた、解像度などの違いだろう。
問題は、白黒あるいは上下方向に反転していることである。
「Y軸が下向き」という仮定が間違えているか、evenとoddを取り違えた著者のミスか。

同様に図7.14も逆になる。
fig714 = writeppm (b2c.wedgeAnnulus 0.25 7) "fig714.ppm" 50 (-5/4,-5/4) (5/4,5/4)
 

fig715 = writeppm (b2c.shiftXor 2.6 altRings) "fig715.ppm" 20 (-5,-5) (5,5)
 



コメント

名前:
コメント:
記事メニュー
最近更新されたスレッド
ウィキ募集バナー