some notes on rasterization for tile visibility testing
[ruff:gruff.git] / TODO
1
2 claude@jazzyjeff:~/code/ruff$ ghci
3 GHCi, version 7.0.4: http://www.haskell.org/ghc/  :? for help
4 Loading package ghc-prim ... linking ... done.
5 Loading package integer-simple ... linking ... done.
6 Loading package base ... linking ... done.
7 Loading package ffi-1.0 ... linking ... done.
8 Prelude> 8192/256
9 32.0
10 Prelude> 32^2 + 16^2
11 1280
12 Prelude> unlines [ [ if unitBox x y `exteriorTo` rectangle then '#' else ' ' | i <- [ 0 .. 7 ], let x = fromIntegral i ] | j <- [ 0 .. 7 ], let y = fromIntegrla j ]
13
14 <interactive>:1:16: Not in scope: `unitBox'
15
16 <interactive>:1:28: Not in scope: `exteriorTo'
17
18 <interactive>:1:41: Not in scope: `rectangle'
19
20 <interactive>:1:140: Not in scope: `fromIntegrla'
21 Prelude> let unitBox x y = [ (x, y), (x + 1, y), (x + 1, y + 1), (x, y + 1) ]
22 Prelude> let exteriorTo ps ls = or [ and [ p `outside` l | p <- ps ] | l <- ls ]
23
24 <interactive>:1:37: Not in scope: `outside'
25 Prelude> let outside p (n, z) = p `dot` n > z
26
27 <interactive>:1:26: Not in scope: `dot'
28 Prelude> let dot (x, y) (u, v) = x * u + y * v
29 Prelude> let outside p (n, z) = p `dot` n > z
30 Prelude> let exteriorTo ps ls = or [ and [ p `outside` l | p <- ps ] | l <- ls ]
31 Prelude> let rotate a (x, y) = let co = cos a ; si = sin a in (co * x + si * y, -si * x + co * y)
32 Prelude> let translate (u, v) (x, y) = (u + x, v + y)
33 Prelude> :show bindings 
34 dot :: Num a => (a, a) -> (a, a) -> a = _
35 exteriorTo ::
36   (Ord a, Num a) => [(a, a)] -> [((a, a), a)] -> Bool = _
37 it :: Integer = 1280
38 outside :: (Ord a, Num a) => (a, a) -> ((a, a), a) -> Bool = _
39 rotate :: Floating t => t -> (t, t) -> (t, t) = _
40 translate :: (Num t1, Num t) => (t, t1) -> (t, t1) -> (t, t1) = _
41 unitBox :: (Num t1, Num t) => t -> t1 -> [(t, t1)] = _
42 Prelude> let axes (w, h) = [(w,0),(0,h),(-w,0),(0,-h)] 
43 Prelude> let rectangle c a (w, h) = map (flip (,) 1 . translate c . rotate a) [(1/w,0),(0,1/h),(-1/w,0),(0,-1/h)] 
44 Prelude> let raster (w, h) r = unlines [ [ if unitBox x y `exteriorTo` r then '#' else ' ' | i <- [ 0 .. w - 1 ], let x = fromIntegral i ] | j <- [ 0 .. h - 1 ], let y = fromIntegral j ]
45 Prelude> let raster (w, h) r = unlines [ [ if unitBox x y `exteriorTo` r then ' ' else '#' | i <- [ -w .. w ], let x = fromIntegral i ] | j <- [ -h .. h ], let y = fromIntegral j ]
46 Prelude> let rectangle c a (w, h) = map (flip (,) 1 . translate c . rotate a) [(1/w,0),(0,1/h),(-1/w,0),(0,-1/h)] 
47 Prelude> putStr . raster (16, 16) $ rectangle (0, 0) 0.6 (7, 7)
48                                  
49                                  
50                                  
51                                  
52                                  
53                                  
54                 ###              
55                #####             
56              #######             
57             #########            
58           ############           
59          #############           
60        ################          
61       ##################         
62       ##################         
63       ###################        
64        ###################       
65         ##################       
66         ##################       
67          ################        
68           #############          
69           ############           
70            #########             
71             #######              
72             #####                
73              ###                 
74                                  
75                                  
76                                  
77                                  
78                                  
79                                  
80                                  
81 Prelude> putStr . raster (16, 16) $ rectangle (0, 0) 0.6 (3, 7)
82                                  
83                                  
84                                  
85                                  
86                                  
87                                  
88                                  
89                                  
90              ##                  
91             ####                 
92           #######                
93          ########                
94          #########               
95           #########              
96           #########              
97            #########             
98             #########            
99              #########           
100              #########           
101               #########          
102                ########          
103                #######           
104                 ####             
105                  ##              
106                                  
107                                  
108                                  
109                                  
110                                  
111                                  
112                                  
113                                  
114                                  
115 Prelude> -- translation doesn't work yet