大久保弘崇
ex7.2
最終更新:
hirotakaohkubo
-
view
7.6
動作確認のための図7.16がきちんと提供されているのはありがたい。
xorgon num r reg = foldr1 xorR [translate (r * cos t, r * sin t) reg |
i <- [0..num-1], let t = 2 * pi * i / num ]
fig716 = writeppm (b2c.xorgon 8 (7/4) altRings) "ex76.ppm" 50 (-7/2,-7/2) (7/2,7/2)

sin,cosを使わない方法てもできる。
xorgon' num r reg = foldr1 xorR regs where
reg1 = translate (r, 0) reg
regs = reg1 : [ rotate (2*pi*i/num) reg1 | i <- [1..num-1] ]
7.7
著者の意図はこういうことであろうが、
ex77 n = altRings `xorR` radReg n
ex77test = writeppm (b2c.ex77 10) "ex77.ppm" 20 (-5,-5) (5,5)
図7.4 polarChecker 10 を再現しようとすると、放射状の部分が逆になる。

7.8
Exercise 7.8 Use xorR and a coordinate-swapping filter to redefine checker
(Figure 7.2) in terms of a region with alternating horizontal or vertical slabs.
この "vertical slabs" が「vstripの無限の繰り返し」だとすると、
配置を0,1,-1,2,-2,...と工夫したところで、
orでなくxorのために無限のxorを終了しないと1かどうかわからないし、
orにしたとしても0かどうかは無限のorをくぐり抜けたときだとしかわからない。
なので、単体で無限な波板をまず定義する。
配置を0,1,-1,2,-2,...と工夫したところで、
orでなくxorのために無限のxorを終了しないと1かどうかわからないし、
orにしたとしても0かどうかは無限のorをくぐり抜けたときだとしかわからない。
なので、単体で無限な波板をまず定義する。
座標入れ替え変換というものも未出である。
trans im = im . (\ (x,y) -> (y,x))
図7.2の再現で確認する。
ex78 = vslab `xorR` trans vslab
ex78test = writeppm (b2c.ex78) "ex78.ppm" 20 (-7/2,-7/2) (7/2,7/2)

7.9
図7.17
cropでempty=(0,0,0,0)に飛ばされた領域は「完全な透明」で、下に白い紙を敷かないと、黒くレンダリングされてしまう。
また、どう見てもybRingsとは色が逆になっているのでbyRingsを別に定義してそれを使った。
cropでempty=(0,0,0,0)に飛ばされた領域は「完全な透明」で、下に白い紙を敷かないと、黒くレンダリングされてしまう。
また、どう見てもybRingsとは色が逆になっているのでbyRingsを別に定義してそれを使った。
ex79a = crop (wedgeAnnulus 0.25 10) byRings where
byRings = lerpI wavDist yellowI blueI
fig717 = writeppm (ex79a `over` whiteI) "fig717.ppm" 50 (-5/4,-5/4) (5/4,5/4)

図7.18は問題ない。
ex79b = swirl 2 ex79a
fig718 = writeppm (ex79b `over` whiteI) "fig718.ppm" 50 (-5/4,-5/4) (5/4,5/4)
