home *** CD-ROM | disk | FTP | other *** search
open in:
MacOS 8.1
|
Win98
|
DOS
browse contents |
view JSON data
|
view as text
This file was processed as: Mailbox/MIME Entity
(archive/mbox).
Confidence | Program | Detection | Match Type | Support
|
---|
100%
| dexvert
| Mailbox/MIME Entity (archive/mbox)
| magic
| Supported |
100%
| dexvert
| Internet Message Format (text/imf)
| magic
| Supported |
1%
| dexvert
| Text File (text/txt)
| fallback
| Supported |
100%
| file
| Mailbox text, 1st line "From fritzz@net1.UCSD.EDU (john) Wed Aug 27 16:21:25 1986"
| default
| |
99%
| file
| C source text
| default
| |
98%
| file
| C source, ASCII text
| default
| |
100%
| TrID
| E-Mail message (Var. 2)
| default
| |
100%
| checkBytes
| Printable ASCII
| default
| |
100%
| perlTextCheck
| Likely Text (Perl)
| default
| |
100%
| siegfried
| x-fmt/111 Plain Text File
| default
| |
100%
| detectItEasy
| Format: plain text[LF]
| default (weak)
| |
100%
| xdgMime
| application/mbox
| default
|
|
hex view+--------+-------------------------+-------------------------+--------+--------+
|00000000| 46 72 6f 6d 20 66 72 69 | 74 7a 7a 40 6e 65 74 31 |From fri|tzz@net1|
|00000010| 2e 55 43 53 44 2e 45 44 | 55 20 28 6a 6f 68 6e 29 |.UCSD.ED|U (john)|
|00000020| 20 57 65 64 20 41 75 67 | 20 32 37 20 31 36 3a 32 | Wed Aug| 27 16:2|
|00000030| 31 3a 32 35 20 31 39 38 | 36 0a 50 61 74 68 3a 20 |1:25 198|6.Path: |
|00000040| 62 65 6e 6f 21 73 65 69 | 73 6d 6f 21 63 6f 6c 75 |beno!sei|smo!colu|
|00000050| 6d 62 69 61 21 63 61 69 | 70 21 63 6c 79 64 65 21 |mbia!cai|p!clyde!|
|00000060| 63 62 61 74 74 21 63 62 | 6f 73 67 64 21 75 63 62 |cbatt!cb|osgd!ucb|
|00000070| 76 61 78 21 73 64 63 73 | 76 61 78 21 6e 65 74 31 |vax!sdcs|vax!net1|
|00000080| 21 66 72 69 74 7a 7a 0a | 46 72 6f 6d 3a 20 66 72 |!fritzz.|From: fr|
|00000090| 69 74 7a 7a 40 6e 65 74 | 31 2e 55 43 53 44 2e 45 |itzz@net|1.UCSD.E|
|000000a0| 44 55 20 28 6a 6f 68 6e | 29 0a 4e 65 77 73 67 72 |DU (john|).Newsgr|
|000000b0| 6f 75 70 73 3a 20 6e 65 | 74 2e 73 6f 75 72 63 65 |oups: ne|t.source|
|000000c0| 73 0a 53 75 62 6a 65 63 | 74 3a 20 6f 6e 65 20 6d |s.Subjec|t: one m|
|000000d0| 6f 72 65 20 74 69 6d 65 | 2e 2e 2e 20 72 61 79 20 |ore time|... ray |
|000000e0| 74 72 61 63 69 6e 67 0a | 4d 65 73 73 61 67 65 2d |tracing.|Message-|
|000000f0| 49 44 3a 20 3c 32 34 37 | 40 6e 65 74 31 2e 55 43 |ID: <247|@net1.UC|
|00000100| 53 44 2e 45 44 55 3e 0a | 44 61 74 65 3a 20 32 37 |SD.EDU>.|Date: 27|
|00000110| 20 41 75 67 20 38 36 20 | 32 30 3a 32 31 3a 32 35 | Aug 86 |20:21:25|
|00000120| 20 47 4d 54 0a 52 65 70 | 6c 79 2d 54 6f 3a 20 66 | GMT.Rep|ly-To: f|
|00000130| 72 69 74 7a 7a 40 6e 65 | 74 31 2e 55 55 43 50 20 |ritzz@ne|t1.UUCP |
|00000140| 28 6a 6f 68 6e 29 0a 4f | 72 67 61 6e 69 7a 61 74 |(john).O|rganizat|
|00000150| 69 6f 6e 3a 20 61 62 65 | 72 63 72 6f 6d 62 69 65 |ion: abe|rcrombie|
|00000160| 20 62 6d 66 20 67 72 61 | 70 68 69 63 73 0a 4c 69 | bmf gra|phics.Li|
|00000170| 6e 65 73 3a 20 37 32 35 | 0a 0a 0a 77 65 6c 6c 2c |nes: 725|...well,|
|00000180| 20 69 74 20 73 65 65 6d | 73 20 74 68 61 74 20 62 | it seem|s that b|
|00000190| 65 74 77 65 65 6e 20 61 | 20 66 65 77 20 74 79 70 |etween a| few typ|
|000001a0| 6f 27 73 20 69 6e 20 6d | 79 20 6f 6c 64 20 73 6f |o's in m|y old so|
|000001b0| 75 72 63 65 2c 20 6e 65 | 77 73 0a 74 72 75 6e 63 |urce, ne|ws.trunc|
|000001c0| 61 74 69 6e 67 20 74 68 | 65 20 61 72 74 69 63 6c |ating th|e articl|
|000001d0| 65 73 2c 20 61 6e 64 20 | 6f 75 72 20 6e 65 77 73 |es, and |our news|
|000001e0| 20 61 63 74 69 6e 67 20 | 73 74 72 61 6e 67 65 2c | acting |strange,|
|000001f0| 20 69 74 20 69 73 20 62 | 65 6c 61 74 65 64 6c 79 | it is b|elatedly|
|00000200| 0a 74 69 6d 65 20 66 6f | 72 20 73 6f 6e 20 6f 66 |.time fo|r son of|
|00000210| 20 73 6f 6e 20 6f 66 20 | 74 72 61 63 65 72 2e 20 | son of |tracer. |
|00000220| 49 20 6b 65 65 70 20 6f | 6e 20 70 72 6f 6d 69 73 |I keep o|n promis|
|00000230| 69 6e 67 20 74 68 61 74 | 20 49 20 77 6f 6e 27 74 |ing that| I won't|
|00000240| 20 70 6f 73 74 0a 74 68 | 65 73 65 20 61 6e 79 6d | post.th|ese anym|
|00000250| 6f 72 65 2c 20 62 75 74 | 20 64 65 6d 61 6e 64 20 |ore, but| demand |
|00000260| 73 74 61 79 73 20 64 65 | 6d 61 6e 64 69 6e 67 2c |stays de|manding,|
|00000270| 20 73 6f 20 68 65 72 65 | 20 69 74 20 69 73 3a 0a | so here| it is:.|
|00000280| 74 72 61 63 65 72 20 32 | 2e 31 0a 69 74 20 69 73 |tracer 2|.1.it is|
|00000290| 20 69 6e 20 74 68 72 65 | 65 20 73 68 61 72 73 2c | in thre|e shars,|
|000002a0| 20 77 69 74 68 20 74 68 | 69 73 20 74 68 65 20 66 | with th|is the f|
|000002b0| 69 72 73 74 20 6f 6e 65 | 20 68 6f 6c 64 69 6e 67 |irst one| holding|
|000002c0| 20 61 6c 6c 20 63 6f 64 | 65 20 61 6e 64 0a 68 65 | all cod|e and.he|
|000002d0| 61 64 65 72 20 66 69 6c | 65 73 2c 20 61 6e 64 20 |ader fil|es, and |
|000002e0| 74 68 65 20 6f 74 68 65 | 72 20 74 77 6f 20 68 6f |the othe|r two ho|
|000002f0| 6c 64 69 6e 67 20 73 75 | 70 70 6f 72 74 20 64 6f |lding su|pport do|
|00000300| 63 75 6d 65 6e 74 73 20 | 61 6e 64 20 64 61 74 61 |cuments |and data|
|00000310| 20 66 69 6c 65 73 0a 69 | 6e 63 6c 75 64 69 6e 67 | files.i|ncluding|
|00000320| 20 74 68 65 20 6d 75 63 | 68 20 64 65 6d 61 6e 64 | the muc|h demand|
|00000330| 65 64 20 73 75 73 69 65 | 20 28 79 6f 75 20 67 75 |ed susie| (you gu|
|00000340| 79 73 20 61 72 65 20 61 | 6c 6c 20 73 69 63 6b 2c |ys are a|ll sick,|
|00000350| 20 69 74 27 73 20 6f 6e | 6c 79 0a 62 6c 61 63 6b | it's on|ly.black|
|00000360| 20 61 6e 64 20 77 68 69 | 74 65 20 3d 29 0a 73 6f | and whi|te =).so|
|00000370| 2c 20 77 69 74 68 6f 75 | 74 20 66 75 72 74 68 65 |, withou|t furthe|
|00000380| 72 20 61 64 6f 3a 0a 2d | 2d 2d 2d 2d 2d 2d 2d 2d |r ado:.-|--------|
|00000390| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003a0| 2d 2d 2d 2d 2d 2d 2d 2d | 2d 2d 2d 2d 2d 2d 2d 2d |--------|--------|
|000003b0| 2d 2d 2d 2d 2d 0a 0a 0a | 23 20 54 68 69 73 20 69 |-----...|# This i|
|000003c0| 73 20 61 20 73 68 65 6c | 6c 20 61 72 63 68 69 76 |s a shel|l archiv|
|000003d0| 65 2e 20 20 52 65 6d 6f | 76 65 20 61 6e 79 74 68 |e. Remo|ve anyth|
|000003e0| 69 6e 67 20 62 65 66 6f | 72 65 20 74 68 69 73 20 |ing befo|re this |
|000003f0| 6c 69 6e 65 2c 0a 23 20 | 74 68 65 6e 20 75 6e 70 |line,.# |then unp|
|00000400| 61 63 6b 20 69 74 20 62 | 79 20 73 61 76 69 6e 67 |ack it b|y saving|
|00000410| 20 69 74 20 69 6e 20 61 | 20 66 69 6c 65 20 61 6e | it in a| file an|
|00000420| 64 20 74 79 70 69 6e 67 | 20 22 73 68 20 66 69 6c |d typing| "sh fil|
|00000430| 65 22 2e 0a 23 0a 23 20 | 57 72 61 70 70 65 64 20 |e"..#.# |Wrapped |
|00000440| 62 79 20 77 69 7a 61 72 | 64 21 66 72 69 74 7a 7a |by wizar|d!fritzz|
|00000450| 20 6f 6e 20 57 65 64 20 | 41 75 67 20 32 37 20 31 | on Wed |Aug 27 1|
|00000460| 33 3a 30 33 3a 33 37 20 | 50 44 54 20 31 39 38 36 |3:03:37 |PDT 1986|
|00000470| 0a 23 20 43 6f 6e 74 65 | 6e 74 73 3a 20 20 66 69 |.# Conte|nts: fi|
|00000480| 6e 64 2e 63 20 67 5f 62 | 61 6c 2e 63 20 67 5f 62 |nd.c g_b|al.c g_b|
|00000490| 6f 64 2e 63 20 72 65 66 | 72 61 63 74 2e 63 20 73 |od.c ref|ract.c s|
|000004a0| 68 61 64 65 2e 63 20 73 | 75 70 70 6f 72 74 2e 63 |hade.c s|upport.c|
|000004b0| 20 74 72 61 63 65 72 2e | 63 0a 23 09 65 78 74 65 | tracer.|c.#.exte|
|000004c0| 72 6e 2e 68 20 6d 61 63 | 72 6f 73 2e 68 20 72 74 |rn.h mac|ros.h rt|
|000004d0| 64 2e 68 0a 20 0a 65 63 | 68 6f 20 78 20 2d 20 66 |d.h. .ec|ho x - f|
|000004e0| 69 6e 64 2e 63 0a 73 65 | 64 20 27 73 2f 5e 40 2f |ind.c.se|d 's/^@/|
|000004f0| 2f 27 20 3e 20 22 66 69 | 6e 64 2e 63 22 20 3c 3c |/' > "fi|nd.c" <<|
|00000500| 27 40 2f 2f 45 2a 4f 2a | 46 20 66 69 6e 64 2e 63 |'@//E*O*|F find.c|
|00000510| 2f 2f 27 0a 23 69 6e 63 | 6c 75 64 65 20 3c 6d 61 |//'.#inc|lude <ma|
|00000520| 74 68 2e 68 3e 0a 23 69 | 6e 63 6c 75 64 65 20 22 |th.h>.#i|nclude "|
|00000530| 72 74 64 2e 68 22 0a 23 | 69 6e 63 6c 75 64 65 20 |rtd.h".#|include |
|00000540| 22 65 78 74 65 72 6e 2e | 68 22 0a 23 69 6e 63 6c |"extern.|h".#incl|
|00000550| 75 64 65 20 22 6d 61 63 | 72 6f 73 2e 68 22 0a 0a |ude "mac|ros.h"..|
|00000560| 0a 64 6f 75 62 6c 65 20 | 20 66 69 6e 64 6f 20 28 |.double | findo (|
|00000570| 6d 2c 20 73 29 20 2f 2a | 20 66 69 6e 64 73 20 77 |m, s) /*| finds w|
|00000580| 68 65 72 65 20 61 20 72 | 61 79 20 69 6e 73 69 64 |here a r|ay insid|
|00000590| 65 20 74 68 65 20 62 61 | 6c 6c 20 65 78 69 74 73 |e the ba|ll exits|
|000005a0| 2e 20 2a 2f 0a 73 74 72 | 75 63 74 20 6d 61 74 20 |. */.str|uct mat |
|000005b0| 2a 6d 3b 0a 73 74 72 75 | 63 74 20 73 70 68 65 72 |*m;.stru|ct spher|
|000005c0| 65 20 20 2a 73 3b 0a 7b | 0a 2f 2a 20 66 6f 6f 70 |e *s;.{|./* foop|
|000005d0| 73 20 69 64 20 74 68 65 | 20 72 6f 74 61 74 65 64 |s id the| rotated|
|000005e0| 20 70 6f 73 69 74 69 6f | 6e 20 76 65 63 74 6f 72 | positio|n vector|
|000005f0| 2e 20 2a 2f 0a 20 20 20 | 20 73 74 72 75 63 74 20 |. */. | struct |
|00000600| 76 65 63 74 6f 72 20 20 | 20 66 6f 6f 70 73 3b 0a |vector | foops;.|
|00000610| 20 20 20 20 64 6f 75 62 | 6c 65 20 20 74 3b 0a 20 | doub|le t;. |
|00000620| 20 20 20 4d 54 56 20 28 | 66 6f 6f 70 73 2c 20 28 | MTV (|foops, (|
|00000630| 2a 6d 29 2c 20 73 20 2d | 3e 20 63 65 6e 74 29 3b |*m), s -|> cent);|
|00000640| 0a 2f 2a 20 73 65 65 20 | 69 66 20 69 74 20 68 69 |./* see |if it hi|
|00000650| 74 73 20 74 68 65 20 62 | 61 6c 6c 20 28 69 74 20 |ts the b|all (it |
|00000660| 62 65 74 74 65 72 29 2a | 2f 0a 20 20 20 20 74 20 |better)*|/. t |
|00000670| 3d 20 73 20 2d 3e 20 72 | 61 64 20 2a 20 73 20 2d |= s -> r|ad * s -|
|00000680| 3e 20 72 61 64 20 2d 20 | 66 6f 6f 70 73 2e 79 20 |> rad - |foops.y |
|00000690| 2a 20 66 6f 6f 70 73 2e | 79 20 2d 20 66 6f 6f 70 |* foops.|y - foop|
|000006a0| 73 2e 7a 20 2a 20 66 6f | 6f 70 73 2e 7a 3b 0a 20 |s.z * fo|ops.z;. |
|000006b0| 20 20 20 69 66 20 28 74 | 20 3e 20 30 29 0a 09 74 | if (t| > 0)..t|
|000006c0| 20 3d 20 66 6f 6f 70 73 | 2e 78 20 2b 20 73 71 72 | = foops|.x + sqr|
|000006d0| 74 20 28 74 29 3b 0a 20 | 20 20 20 65 6c 73 65 0a |t (t);. | else.|
|000006e0| 09 74 20 3d 20 30 3b 0a | 2f 2a 20 72 65 74 75 72 |.t = 0;.|/* retur|
|000006f0| 6e 20 68 6f 77 20 66 61 | 72 20 61 6c 6f 6e 67 20 |n how fa|r along |
|00000700| 74 68 65 20 72 61 79 20 | 79 6f 75 20 77 65 72 65 |the ray |you were|
|00000710| 20 77 68 65 6e 20 79 6f | 75 20 68 69 74 20 2a 2f | when yo|u hit */|
|00000720| 0a 20 20 20 20 72 65 74 | 75 72 6e 20 28 74 29 3b |. ret|urn (t);|
|00000730| 0a 7d 0a 0a 64 6f 75 62 | 6c 65 20 20 66 69 6e 64 |.}..doub|le find|
|00000740| 20 28 6d 2c 20 73 29 2f | 2a 20 66 69 6e 64 73 20 | (m, s)/|* finds |
|00000750| 77 68 65 74 68 65 72 20 | 61 20 72 61 79 20 68 69 |whether |a ray hi|
|00000760| 74 73 20 61 20 62 61 6c | 6c 2a 2f 0a 73 74 72 75 |ts a bal|l*/.stru|
|00000770| 63 74 20 6d 61 74 20 2a | 6d 3b 0a 73 74 72 75 63 |ct mat *|m;.struc|
|00000780| 74 20 73 70 68 65 72 65 | 20 20 2a 73 3b 0a 7b 0a |t sphere| *s;.{.|
|00000790| 20 20 20 20 73 74 72 75 | 63 74 20 76 65 63 74 6f | stru|ct vecto|
|000007a0| 72 20 20 20 66 6f 6f 70 | 73 3b 0a 20 20 20 20 64 |r foop|s;. d|
|000007b0| 6f 75 62 6c 65 20 20 74 | 3b 0a 20 20 20 20 4d 54 |ouble t|;. MT|
|000007c0| 56 20 28 66 6f 6f 70 73 | 2c 20 28 2a 6d 29 2c 20 |V (foops|, (*m), |
|000007d0| 73 20 2d 3e 20 63 65 6e | 74 29 3b 0a 20 20 20 20 |s -> cen|t);. |
|000007e0| 74 20 3d 20 73 20 2d 3e | 20 72 61 64 20 2a 20 73 |t = s ->| rad * s|
|000007f0| 20 2d 3e 20 72 61 64 20 | 2d 20 66 6f 6f 70 73 2e | -> rad |- foops.|
|00000800| 79 20 2a 20 66 6f 6f 70 | 73 2e 79 20 2d 20 66 6f |y * foop|s.y - fo|
|00000810| 6f 70 73 2e 7a 20 2a 20 | 66 6f 6f 70 73 2e 7a 3b |ops.z * |foops.z;|
|00000820| 0a 20 20 20 20 69 66 20 | 28 74 20 3e 20 30 29 0a |. if |(t > 0).|
|00000830| 09 74 20 3d 20 66 6f 6f | 70 73 2e 78 20 2d 20 73 |.t = foo|ps.x - s|
|00000840| 71 72 74 20 28 74 29 3b | 0a 20 20 20 20 65 6c 73 |qrt (t);|. els|
|00000850| 65 0a 09 74 20 3d 20 30 | 3b 0a 20 20 20 20 72 65 |e..t = 0|;. re|
|00000860| 74 75 72 6e 20 28 74 29 | 3b 0a 7d 0a 0a 64 6f 75 |turn (t)|;.}..dou|
|00000870| 62 6c 65 20 20 66 69 6e | 64 73 20 28 6d 2c 20 73 |ble fin|ds (m, s|
|00000880| 29 2f 2a 20 66 69 6e 64 | 73 20 69 66 20 61 20 62 |)/* find|s if a b|
|00000890| 61 6c 6c 20 69 73 20 62 | 65 74 77 65 65 6e 20 61 |all is b|etween a|
|000008a0| 20 70 6f 69 6e 74 20 61 | 6e 64 20 61 20 0a 09 09 | point a|nd a ...|
|000008b0| 09 6c 69 67 68 74 73 6f | 75 72 63 65 2e 20 52 65 |.lightso|urce. Re|
|000008c0| 74 75 72 6e 73 20 68 6f | 77 20 6f 62 73 63 75 72 |turns ho|w obscur|
|000008d0| 69 6e 67 20 74 68 65 20 | 62 61 6c 6c 20 69 73 20 |ing the |ball is |
|000008e0| 2a 2f 0a 73 74 72 75 63 | 74 20 6d 61 74 20 2a 6d |*/.struc|t mat *m|
|000008f0| 3b 0a 73 74 72 75 63 74 | 20 73 70 68 65 72 65 20 |;.struct| sphere |
|00000900| 20 2a 73 3b 0a 7b 0a 20 | 20 20 20 73 74 72 75 63 | *s;.{. | struc|
|00000910| 74 20 76 65 63 74 6f 72 | 20 20 20 66 6f 6f 70 73 |t vector| foops|
|00000920| 3b 0a 20 20 20 20 64 6f | 75 62 6c 65 20 20 74 3b |;. do|uble t;|
|00000930| 0a 20 20 20 20 4d 54 56 | 20 28 66 6f 6f 70 73 2c |. MTV| (foops,|
|00000940| 20 28 2a 6d 29 2c 20 73 | 20 2d 3e 20 63 65 6e 74 | (*m), s| -> cent|
|00000950| 29 3b 0a 20 20 20 20 74 | 20 3d 20 73 20 2d 3e 20 |);. t| = s -> |
|00000960| 72 61 64 20 2d 20 73 71 | 72 74 20 28 66 6f 6f 70 |rad - sq|rt (foop|
|00000970| 73 2e 79 20 2a 20 66 6f | 6f 70 73 2e 79 20 2b 20 |s.y * fo|ops.y + |
|00000980| 66 6f 6f 70 73 2e 7a 20 | 2a 20 66 6f 6f 70 73 2e |foops.z |* foops.|
|00000990| 7a 29 3b 0a 20 20 20 20 | 69 66 20 28 74 20 3e 20 |z);. |if (t > |
|000009a0| 30 29 0a 09 74 20 3d 20 | 74 20 2f 20 66 6f 6f 70 |0)..t = |t / foop|
|000009b0| 73 2e 78 3b 0a 20 20 20 | 20 65 6c 73 65 0a 09 74 |s.x;. | else..t|
|000009c0| 20 3d 20 30 3b 0a 20 20 | 20 20 72 65 74 75 72 6e | = 0;. | return|
|000009d0| 20 28 74 29 3b 0a 7d 0a | 0a 0a 0a 0a 64 6f 75 62 | (t);.}.|....doub|
|000009e0| 6c 65 20 20 73 68 61 64 | 6f 77 20 28 70 29 2f 2a |le shad|ow (p)/*|
|000009f0| 20 66 69 6e 64 73 20 69 | 66 20 61 20 70 6f 69 6e | finds i|f a poin|
|00000a00| 74 20 69 73 20 69 6e 20 | 61 20 73 68 61 64 6f 77 |t is in |a shadow|
|00000a10| 2c 20 6f 72 20 69 66 20 | 69 74 20 69 73 20 6f 6e |, or if |it is on|
|00000a20| 20 65 64 67 65 20 2a 2f | 0a 73 74 72 75 63 74 20 | edge */|.struct |
|00000a30| 76 65 63 74 6f 72 20 20 | 2a 70 3b 0a 7b 0a 20 20 |vector |*p;.{. |
|00000a40| 20 20 73 74 72 75 63 74 | 20 6d 61 74 20 20 74 72 | struct| mat tr|
|00000a50| 61 6e 73 3b 0a 20 20 20 | 20 73 74 72 75 63 74 20 |ans;. | struct |
|00000a60| 73 70 68 65 72 65 20 20 | 20 73 73 3b 0a 20 20 20 |sphere | ss;. |
|00000a70| 20 73 74 72 75 63 74 20 | 76 65 63 74 6f 72 20 20 | struct |vector |
|00000a80| 20 64 3b 0a 20 20 20 20 | 69 6e 74 20 20 20 20 20 | d;. |int |
|00000a90| 63 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 69 |c,. | i|
|00000aa0| 3b 0a 20 20 20 20 64 6f | 75 62 6c 65 20 20 6c 2c |;. do|uble l,|
|00000ab0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 6b 2c 0a |. | k,.|
|00000ac0| 20 20 20 20 20 20 20 20 | 20 20 20 20 78 2c 0a 20 | | x,. |
|00000ad0| 20 20 20 20 20 20 20 20 | 20 20 20 79 2c 0a 20 20 | | y,. |
|00000ae0| 20 20 20 20 20 20 20 20 | 20 20 7a 2c 0a 20 20 20 | | z,. |
|00000af0| 20 20 20 20 20 20 20 20 | 20 66 69 6e 64 73 20 28 | | finds (|
|00000b00| 29 3b 0a 20 20 20 20 6c | 20 3d 20 30 2e 30 3b 0a |);. l| = 0.0;.|
|00000b10| 20 20 20 20 63 20 3d 20 | 2d 31 3b 0a 20 20 20 20 | c = |-1;. |
|00000b20| 53 56 20 28 64 2c 20 6c | 73 2e 63 65 6e 74 2c 20 |SV (d, l|s.cent, |
|00000b30| 28 2a 70 29 29 3b 0a 20 | 20 20 20 64 2e 6c 20 3d |(*p));. | d.l =|
|00000b40| 20 4c 45 4e 20 28 64 29 | 3b 0a 20 20 20 20 64 2e | LEN (d)|;. d.|
|00000b50| 78 7a 6c 20 3d 20 58 5a | 4c 20 28 64 29 3b 0a 20 |xzl = XZ|L (d);. |
|00000b60| 20 20 20 6d 74 20 28 26 | 28 64 29 2c 20 26 74 72 | mt (&|(d), &tr|
|00000b70| 61 6e 73 29 3b 0a 0a 20 | 20 20 20 66 6f 72 20 28 |ans);.. | for (|
|00000b80| 69 20 3d 20 30 3b 20 69 | 20 3c 20 6e 6f 62 3b 20 |i = 0; i| < nob; |
|00000b90| 69 2b 2b 29 20 7b 0a 09 | 73 73 2e 72 61 64 20 3d |i++) {..|ss.rad =|
|00000ba0| 20 62 6c 5b 69 5d 20 2d | 3e 20 73 2e 72 61 64 3b | bl[i] -|> s.rad;|
|00000bb0| 0a 09 53 56 20 28 73 73 | 2e 63 65 6e 74 2c 20 62 |..SV (ss|.cent, b|
|00000bc0| 6c 5b 69 5d 20 2d 3e 20 | 73 2e 63 65 6e 74 2c 20 |l[i] -> |s.cent, |
|00000bd0| 28 2a 70 29 29 3b 0a 09 | 69 66 20 28 28 6b 20 3d |(*p));..|if ((k =|
|00000be0| 20 66 69 6e 64 73 20 28 | 26 74 72 61 6e 73 2c 20 | finds (|&trans, |
|00000bf0| 26 73 73 29 29 20 3e 20 | 6c 29 20 7b 0a 09 20 20 |&ss)) > |l) {.. |
|00000c00| 20 20 63 20 3d 20 69 3b | 0a 09 20 20 20 20 6c 20 | c = i;|.. l |
|00000c10| 3d 20 6b 3b 0a 09 7d 0a | 20 20 20 20 7d 0a 20 20 |= k;..}.| }. |
|00000c20| 20 20 69 66 20 28 63 20 | 3d 3d 20 2d 31 29 0a 09 | if (c |== -1)..|
|00000c30| 6b 20 3d 20 32 30 30 2e | 30 3b 0a 20 20 20 20 65 |k = 200.|0;. e|
|00000c40| 6c 73 65 20 7b 0a 09 6b | 20 3d 20 31 2e 30 20 2d |lse {..k| = 1.0 -|
|00000c50| 20 6c 20 2f 20 28 28 6c | 73 2e 72 61 64 29 20 2f | l / ((l|s.rad) /|
|00000c60| 20 28 64 2e 6c 29 29 3b | 0a 09 69 66 20 28 6b 20 | (d.l));|..if (k |
|00000c70| 3c 20 30 2e 30 29 0a 09 | 20 20 20 20 6b 20 3d 20 |< 0.0)..| k = |
|00000c80| 30 2e 30 3b 0a 09 6b 20 | 2a 3d 20 32 30 30 2e 30 |0.0;..k |*= 200.0|
|00000c90| 3b 0a 20 20 20 20 7d 0a | 20 20 20 20 72 65 74 75 |;. }.| retu|
|00000ca0| 72 6e 20 28 6b 29 3b 0a | 7d 0a 40 2f 2f 45 2a 4f |rn (k);.|}.@//E*O|
|00000cb0| 2a 46 20 66 69 6e 64 2e | 63 2f 2f 0a 63 68 6d 6f |*F find.|c//.chmo|
|00000cc0| 64 20 75 3d 72 77 2c 67 | 3d 72 2c 6f 3d 72 20 66 |d u=rw,g|=r,o=r f|
|00000cd0| 69 6e 64 2e 63 0a 20 0a | 65 63 68 6f 20 78 20 2d |ind.c. .|echo x -|
|00000ce0| 20 67 5f 62 61 6c 2e 63 | 0a 73 65 64 20 27 73 2f | g_bal.c|.sed 's/|
|00000cf0| 5e 40 2f 2f 27 20 3e 20 | 22 67 5f 62 61 6c 2e 63 |^@//' > |"g_bal.c|
|00000d00| 22 20 3c 3c 27 40 2f 2f | 45 2a 4f 2a 46 20 67 5f |" <<'@//|E*O*F g_|
|00000d10| 62 61 6c 2e 63 2f 2f 27 | 0a 23 69 6e 63 6c 75 64 |bal.c//'|.#includ|
|00000d20| 65 20 3c 73 74 64 69 6f | 2e 68 3e 0a 23 69 6e 63 |e <stdio|.h>.#inc|
|00000d30| 6c 75 64 65 20 22 72 74 | 64 2e 68 22 0a 23 69 6e |lude "rt|d.h".#in|
|00000d40| 63 6c 75 64 65 20 22 65 | 78 74 65 72 6e 2e 68 22 |clude "e|xtern.h"|
|00000d50| 0a 67 5f 62 61 6c 20 28 | 64 66 29 0a 46 49 4c 45 |.g_bal (|df).FILE|
|00000d60| 20 2a 20 64 66 3b 0a 7b | 0a 20 20 20 20 69 6e 74 | * df;.{|. int|
|00000d70| 20 20 20 20 20 69 3b 0a | 20 20 20 20 64 6f 75 62 | i;.| doub|
|00000d80| 6c 65 20 20 78 2c 0a 20 | 20 20 20 20 20 20 20 20 |le x,. | |
|00000d90| 20 20 20 79 2c 0a 20 20 | 20 20 20 20 20 20 20 20 | y,. | |
|00000da0| 20 20 7a 2c 0a 20 20 20 | 20 20 20 20 20 20 20 20 | z,. | |
|00000db0| 20 72 2c 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 | r,. | |
|00000dc0| 69 6f 72 2c 0a 20 20 20 | 20 20 20 20 20 20 20 20 |ior,. | |
|00000dd0| 20 72 66 72 2c 0a 20 20 | 20 20 20 20 20 20 20 20 | rfr,. | |
|00000de0| 20 20 72 66 6c 2c 0a 20 | 20 20 20 20 20 20 20 20 | rfl,. | |
|00000df0| 20 20 20 64 69 66 2c 0a | 20 20 20 20 20 20 20 20 | dif,.| |
|00000e00| 20 20 20 20 61 6d 62 3b | 0a 20 20 20 20 66 6f 72 | amb;|. for|
|00000e10| 20 28 69 20 3d 20 30 3b | 0a 09 20 20 20 20 66 73 | (i = 0;|.. fs|
|00000e20| 63 61 6e 66 20 28 64 66 | 2c 20 22 25 46 20 25 46 |canf (df|, "%F %F|
|00000e30| 20 25 46 20 25 46 20 25 | 46 20 25 46 20 25 46 20 | %F %F %|F %F %F |
|00000e40| 25 46 20 25 46 22 2c 0a | 09 09 26 78 2c 20 26 79 |%F %F",.|..&x, &y|
|00000e50| 2c 20 26 7a 2c 20 26 72 | 2c 20 26 69 6f 72 2c 20 |, &z, &r|, &ior, |
|00000e60| 26 72 66 72 2c 20 26 72 | 66 6c 2c 20 26 64 69 66 |&rfr, &r|fl, &dif|
|00000e70| 2c 20 26 61 6d 62 29 20 | 21 3d 20 45 4f 46 3b 0a |, &amb) |!= EOF;.|
|00000e80| 09 20 20 20 20 69 2b 2b | 29 20 7b 0a 09 62 6c 5b |. i++|) {..bl[|
|00000e90| 69 5d 20 3d 20 28 73 74 | 72 75 63 74 20 62 61 6c |i] = (st|ruct bal|
|00000ea0| 6c 20 20 20 2a 29 20 6d | 61 6c 6c 6f 63 20 28 73 |l *) m|alloc (s|
|00000eb0| 69 7a 65 6f 66 20 28 73 | 74 72 75 63 74 20 62 61 |izeof (s|truct ba|
|00000ec0| 6c 6c 29 29 3b 0a 09 62 | 6c 5b 69 5d 20 2d 3e 20 |ll));..b|l[i] -> |
|00000ed0| 73 2e 63 65 6e 74 2e 78 | 20 3d 20 78 3b 0a 09 62 |s.cent.x| = x;..b|
|00000ee0| 6c 5b 69 5d 20 2d 3e 20 | 73 2e 63 65 6e 74 2e 79 |l[i] -> |s.cent.y|
|00000ef0| 20 3d 20 79 3b 0a 09 62 | 6c 5b 69 5d 20 2d 3e 20 | = y;..b|l[i] -> |
|00000f00| 73 2e 63 65 6e 74 2e 7a | 20 3d 20 7a 3b 0a 09 62 |s.cent.z| = z;..b|
|00000f10| 6c 5b 69 5d 20 2d 3e 20 | 73 2e 72 61 64 20 3d 20 |l[i] -> |s.rad = |
|00000f20| 72 3b 0a 09 62 6c 5b 69 | 5d 20 2d 3e 20 69 6f 72 |r;..bl[i|] -> ior|
|00000f30| 20 3d 20 69 6f 72 3b 0a | 09 62 6c 5b 69 5d 20 2d | = ior;.|.bl[i] -|
|00000f40| 3e 20 72 66 72 20 3d 20 | 72 66 72 3b 0a 09 62 6c |> rfr = |rfr;..bl|
|00000f50| 5b 69 5d 20 2d 3e 20 72 | 66 6c 20 3d 20 72 66 6c |[i] -> r|fl = rfl|
|00000f60| 3b 0a 09 62 6c 5b 69 5d | 20 2d 3e 20 64 69 66 20 |;..bl[i]| -> dif |
|00000f70| 3d 20 64 69 66 3b 0a 09 | 62 6c 5b 69 5d 20 2d 3e |= dif;..|bl[i] ->|
|00000f80| 20 61 6d 62 20 3d 20 61 | 6d 62 3b 0a 20 20 20 20 | amb = a|mb;. |
|00000f90| 7d 0a 20 20 20 20 72 65 | 74 75 72 6e 20 28 69 29 |}. re|turn (i)|
|00000fa0| 3b 0a 7d 0a 0a 40 2f 2f | 45 2a 4f 2a 46 20 67 5f |;.}..@//|E*O*F g_|
|00000fb0| 62 61 6c 2e 63 2f 2f 0a | 63 68 6d 6f 64 20 75 3d |bal.c//.|chmod u=|
|00000fc0| 72 77 2c 67 3d 72 2c 6f | 3d 72 20 67 5f 62 61 6c |rw,g=r,o|=r g_bal|
|00000fd0| 2e 63 0a 20 0a 65 63 68 | 6f 20 78 20 2d 20 67 5f |.c. .ech|o x - g_|
|00000fe0| 62 6f 64 2e 63 0a 73 65 | 64 20 27 73 2f 5e 40 2f |bod.c.se|d 's/^@/|
|00000ff0| 2f 27 20 3e 20 22 67 5f | 62 6f 64 2e 63 22 20 3c |/' > "g_|bod.c" <|
|00001000| 3c 27 40 2f 2f 45 2a 4f | 2a 46 20 67 5f 62 6f 64 |<'@//E*O|*F g_bod|
|00001010| 2e 63 2f 2f 27 0a 23 69 | 6e 63 6c 75 64 65 20 3c |.c//'.#i|nclude <|
|00001020| 73 74 64 69 6f 2e 68 3e | 0a 23 69 6e 63 6c 75 64 |stdio.h>|.#includ|
|00001030| 65 20 3c 6d 61 74 68 2e | 68 3e 0a 23 69 6e 63 6c |e <math.|h>.#incl|
|00001040| 75 64 65 20 22 65 78 74 | 65 72 6e 2e 68 22 0a 23 |ude "ext|ern.h".#|
|00001050| 69 6e 63 6c 75 64 65 20 | 22 6d 61 63 72 6f 73 2e |include |"macros.|
|00001060| 68 22 0a 0a 0a 67 5f 62 | 6f 64 20 28 66 29 0a 46 |h"...g_b|od (f).F|
|00001070| 49 4c 45 20 2a 20 66 3b | 0a 7b 0a 20 20 20 20 69 |ILE * f;|.{. i|
|00001080| 6e 74 20 20 20 20 20 6b | 2c 0a 20 20 20 20 20 20 |nt k|,. |
|00001090| 20 20 20 20 20 20 78 3b | 0a 20 20 20 20 64 6f 75 | x;|. dou|
|000010a0| 62 6c 65 20 20 62 69 67 | 20 3d 20 30 2e 30 2c 0a |ble big| = 0.0,.|
|000010b0| 20 20 20 20 20 20 20 20 | 20 20 20 20 6c 69 74 74 | | litt|
|000010c0| 6c 65 20 3d 20 48 55 47 | 45 3b 0a 20 20 20 20 63 |le = HUG|E;. c|
|000010d0| 68 61 72 20 20 20 20 62 | 75 66 5b 35 31 32 5d 3b |har b|uf[512];|
|000010e0| 0a 0a 0a 20 20 20 20 66 | 6f 72 20 28 79 73 75 65 |... f|or (ysue|
|000010f0| 20 3d 20 30 3b 3b 20 79 | 73 75 65 2b 2b 29 20 7b | = 0;; y|sue++) {|
|00001100| 0a 09 69 66 20 28 66 67 | 65 74 73 20 28 62 75 66 |..if (fg|ets (buf|
|00001110| 2c 20 35 31 32 2c 20 66 | 29 20 3d 3d 20 4e 55 4c |, 512, f|) == NUL|
|00001120| 4c 29 0a 09 20 20 20 20 | 62 72 65 61 6b 3b 0a 09 |L).. |break;..|
|00001130| 78 73 75 65 20 3d 20 73 | 74 72 6c 65 6e 20 28 62 |xsue = s|trlen (b|
|00001140| 75 66 29 20 2d 20 31 3b | 0a 09 66 6f 72 20 28 78 |uf) - 1;|..for (x|
|00001150| 20 3d 20 30 3b 20 78 20 | 3c 20 78 73 75 65 3b 20 | = 0; x |< xsue; |
|00001160| 78 2b 2b 29 20 7b 0a 09 | 20 20 20 20 6b 20 3d 20 |x++) {..| k = |
|00001170| 62 75 66 5b 78 5d 3b 0a | 09 20 20 20 20 73 75 7a |buf[x];.|. suz|
|00001180| 69 65 5b 78 5d 5b 79 73 | 75 65 5d 20 3d 20 28 64 |ie[x][ys|ue] = (d|
|00001190| 6f 75 62 6c 65 29 20 6b | 3b 0a 09 20 20 20 20 69 |ouble) k|;.. i|
|000011a0| 66 20 28 62 69 67 20 3c | 20 6b 29 0a 09 09 62 69 |f (big <| k)...bi|
|000011b0| 67 20 3d 20 6b 3b 0a 09 | 20 20 20 20 69 66 20 28 |g = k;..| if (|
|000011c0| 6c 69 74 74 6c 65 20 3e | 20 6b 29 0a 09 09 6c 69 |little >| k)...li|
|000011d0| 74 74 6c 65 20 3d 20 6b | 3b 0a 09 7d 0a 20 20 20 |ttle = k|;..}. |
|000011e0| 20 7d 0a 20 20 20 20 62 | 69 67 20 3d 20 62 69 67 | }. b|ig = big|
|000011f0| 20 2d 20 6c 69 74 74 6c | 65 3b 0a 20 20 20 20 66 | - littl|e;. f|
|00001200| 6f 72 20 28 6b 20 3d 20 | 30 3b 20 6b 20 3c 20 79 |or (k = |0; k < y|
|00001210| 73 75 65 3b 20 6b 2b 2b | 29 0a 09 66 6f 72 20 28 |sue; k++|)..for (|
|00001220| 78 20 3d 20 30 3b 20 78 | 20 3c 20 78 73 75 65 3b |x = 0; x| < xsue;|
|00001230| 20 78 2b 2b 29 0a 09 20 | 20 20 20 73 75 7a 69 65 | x++).. | suzie|
|00001240| 5b 78 5d 5b 6b 5d 20 3d | 20 28 73 75 7a 69 65 5b |[x][k] =| (suzie[|
|00001250| 78 5d 5b 6b 5d 20 2d 20 | 6c 69 74 74 6c 65 29 20 |x][k] - |little) |
|00001260| 2f 20 62 69 67 3b 0a 7d | 0a 40 2f 2f 45 2a 4f 2a |/ big;.}|.@//E*O*|
|00001270| 46 20 67 5f 62 6f 64 2e | 63 2f 2f 0a 63 68 6d 6f |F g_bod.|c//.chmo|
|00001280| 64 20 75 3d 72 77 2c 67 | 3d 72 2c 6f 3d 72 20 67 |d u=rw,g|=r,o=r g|
|00001290| 5f 62 6f 64 2e 63 0a 20 | 0a 65 63 68 6f 20 78 20 |_bod.c. |.echo x |
|000012a0| 2d 20 72 65 66 72 61 63 | 74 2e 63 0a 73 65 64 20 |- refrac|t.c.sed |
|000012b0| 27 73 2f 5e 40 2f 2f 27 | 20 3e 20 22 72 65 66 72 |'s/^@//'| > "refr|
|000012c0| 61 63 74 2e 63 22 20 3c | 3c 27 40 2f 2f 45 2a 4f |act.c" <|<'@//E*O|
|000012d0| 2a 46 20 72 65 66 72 61 | 63 74 2e 63 2f 2f 27 0a |*F refra|ct.c//'.|
|000012e0| 23 69 6e 63 6c 75 64 65 | 20 3c 6d 61 74 68 2e 68 |#include| <math.h|
|000012f0| 3e 0a 23 69 6e 63 6c 75 | 64 65 20 22 72 74 64 2e |>.#inclu|de "rtd.|
|00001300| 68 22 0a 23 69 6e 63 6c | 75 64 65 20 22 6d 61 63 |h".#incl|ude "mac|
|00001310| 72 6f 73 2e 68 22 0a 23 | 69 6e 63 6c 75 64 65 20 |ros.h".#|include |
|00001320| 22 65 78 74 65 72 6e 2e | 68 22 0a 0a 69 6e 74 09 |"extern.|h"..int.|
|00001330| 72 6c 65 76 3b 0a 69 6e | 74 20 20 20 20 20 72 65 |rlev;.in|t re|
|00001340| 66 72 61 63 74 20 28 72 | 2c 20 62 6c 6c 29 0a 73 |fract (r|, bll).s|
|00001350| 74 72 75 63 74 20 72 61 | 79 20 2a 72 3b 0a 73 74 |truct ra|y *r;.st|
|00001360| 72 75 63 74 20 62 61 6c | 6c 20 2a 62 6c 6c 3b 0a |ruct bal|l *bll;.|
|00001370| 7b 0a 20 20 20 20 73 74 | 72 75 63 74 20 76 65 63 |{. st|ruct vec|
|00001380| 74 6f 72 20 20 20 6e 65 | 77 2c 0a 20 20 20 20 20 |tor ne|w,. |
|00001390| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 6e | | n|
|000013a0| 6f 72 6d 3b 0a 20 20 20 | 20 73 74 72 75 63 74 20 |orm;. | struct |
|000013b0| 6d 61 74 20 20 74 72 61 | 6e 73 3b 0a 20 20 20 20 |mat tra|ns;. |
|000013c0| 73 74 72 75 63 74 20 72 | 61 79 20 20 69 72 3b 0a |struct r|ay ir;.|
|000013d0| 20 20 20 20 64 6f 75 62 | 6c 65 20 20 6c 2c 0a 20 | doub|le l,. |
|000013e0| 20 20 20 20 20 20 20 20 | 20 20 20 72 65 66 6b 20 | | refk |
|000013f0| 28 29 2c 20 67 65 74 63 | 61 70 74 20 28 29 2c 20 |(), getc|apt (), |
|00001400| 63 61 70 74 2c 20 69 6e | 73 69 64 65 20 28 29 3b |capt, in|side ();|
|00001410| 0a 20 20 20 20 64 6f 75 | 62 6c 65 20 20 73 74 75 |. dou|ble stu|
|00001420| 70 69 64 3b 0a 20 20 20 | 20 73 74 72 75 63 74 20 |pid;. | struct |
|00001430| 73 70 68 65 72 65 20 20 | 20 73 73 3b 0a 0a 20 20 |sphere | ss;.. |
|00001440| 20 20 53 56 20 28 6e 6f | 72 6d 2c 20 72 20 2d 3e | SV (no|rm, r ->|
|00001450| 20 6f 72 67 2c 20 62 6c | 6c 20 2d 3e 20 73 2e 63 | org, bl|l -> s.c|
|00001460| 65 6e 74 29 3b 0a 20 20 | 20 20 6e 6f 72 6d 2e 6c |ent);. | norm.l|
|00001470| 20 3d 20 62 6c 6c 2d 3e | 20 73 2e 72 61 64 3b 0a | = bll->| s.rad;.|
|00001480| 0a 20 20 20 20 63 61 70 | 74 20 3d 20 67 65 74 63 |. cap|t = getc|
|00001490| 61 70 74 20 28 26 6e 6f | 72 6d 2c 20 26 28 72 20 |apt (&no|rm, &(r |
|000014a0| 2d 3e 20 64 69 72 29 2c | 20 62 6c 6c 20 2d 3e 20 |-> dir),| bll -> |
|000014b0| 69 6f 72 29 3b 0a 0a 0a | 2f 2a 20 67 65 74 20 74 |ior);...|/* get t|
|000014c0| 68 65 20 61 64 64 69 74 | 69 6f 6e 20 66 61 63 74 |he addit|ion fact|
|000014d0| 6f 72 20 66 6f 72 20 74 | 68 65 20 6e 6f 72 6d 61 |or for t|he norma|
|000014e0| 6c 20 66 6f 72 20 72 65 | 66 72 61 63 74 69 6f 6e |l for re|fraction|
|000014f0| 2a 2f 0a 20 20 20 20 73 | 74 75 70 69 64 20 3d 20 |*/. s|tupid = |
|00001500| 72 65 66 6b 20 28 26 28 | 6e 6f 72 6d 29 2c 20 26 |refk (&(|norm), &|
|00001510| 28 72 20 2d 3e 20 64 69 | 72 29 2c 20 62 6c 6c 20 |(r -> di|r), bll |
|00001520| 2d 3e 20 69 6f 72 29 3b | 0a 20 20 20 20 53 43 4d |-> ior);|. SCM|
|00001530| 4c 54 20 28 73 74 75 70 | 69 64 2c 20 6e 6f 72 6d |LT (stup|id, norm|
|00001540| 29 3b 0a 0a 20 20 20 20 | 41 56 20 28 69 72 2e 64 |);.. |AV (ir.d|
|00001550| 69 72 2c 20 72 20 2d 3e | 20 64 69 72 2c 20 6e 6f |ir, r ->| dir, no|
|00001560| 72 6d 29 3b 0a 20 20 20 | 20 4d 56 20 28 72 20 2d |rm);. | MV (r -|
|00001570| 3e 20 6f 72 67 2e 78 2c | 20 72 20 2d 3e 20 6f 72 |> org.x,| r -> or|
|00001580| 67 2e 79 2c 20 72 20 2d | 3e 20 6f 72 67 2e 7a 2c |g.y, r -|> org.z,|
|00001590| 20 69 72 2e 6f 72 67 29 | 3b 0a 0a 2f 2a 20 6e 6f | ir.org)|;../* no|
|000015a0| 77 20 67 65 74 20 69 74 | 20 66 6f 72 20 72 65 66 |w get it| for ref|
|000015b0| 6c 65 63 74 69 6f 6e 20 | 2a 2f 0a 20 20 20 20 53 |lection |*/. S|
|000015c0| 56 20 28 6e 6f 72 6d 2c | 20 72 20 2d 3e 20 6f 72 |V (norm,| r -> or|
|000015d0| 67 2c 20 62 6c 6c 20 2d | 3e 20 73 2e 63 65 6e 74 |g, bll -|> s.cent|
|000015e0| 29 3b 0a 20 20 20 20 6e | 6f 72 6d 2e 6c 20 3d 20 |);. n|orm.l = |
|000015f0| 62 6c 6c 20 2d 3e 20 73 | 2e 72 61 64 3b 0a 20 20 |bll -> s|.rad;. |
|00001600| 20 20 53 43 4d 4c 54 20 | 28 31 2e 30 20 2f 20 6e | SCMLT |(1.0 / n|
|00001610| 6f 72 6d 2e 6c 2c 20 6e | 6f 72 6d 29 3b 0a 20 20 |orm.l, n|orm);. |
|00001620| 20 20 73 74 75 70 69 64 | 20 3d 20 32 2e 30 20 2a | stupid| = 2.0 *|
|00001630| 20 44 4f 54 20 28 6e 6f | 72 6d 2c 20 72 20 2d 3e | DOT (no|rm, r ->|
|00001640| 20 64 69 72 29 3b 0a 20 | 20 20 20 53 43 4d 4c 54 | dir);. | SCMLT|
|00001650| 20 28 73 74 75 70 69 64 | 2c 20 6e 6f 72 6d 29 3b | (stupid|, norm);|
|00001660| 0a 20 20 20 20 53 56 20 | 28 72 20 2d 3e 20 64 69 |. SV |(r -> di|
|00001670| 72 2c 20 72 20 2d 3e 20 | 64 69 72 2c 20 6e 6f 72 |r, r -> |dir, nor|
|00001680| 6d 29 3b 0a 0a 20 20 20 | 20 72 65 74 75 72 6e 20 |m);.. | return |
|00001690| 28 28 69 6e 74 29 20 28 | 28 31 2e 30 20 2d 20 63 |((int) (|(1.0 - c|
|000016a0| 61 70 74 29 20 2a 20 28 | 64 6f 75 62 6c 65 29 20 |apt) * (|double) |
|000016b0| 73 68 61 64 65 20 28 72 | 29 20 2b 20 28 28 63 61 |shade (r|) + ((ca|
|000016c0| 70 74 29 20 2a 20 69 6e | 73 69 64 65 20 28 26 69 |pt) * in|side (&i|
|000016d0| 72 2c 20 62 6c 6c 29 29 | 29 29 3b 0a 7d 0a 0a 64 |r, bll))|));.}..d|
|000016e0| 6f 75 62 6c 65 20 20 69 | 6e 73 69 64 65 20 28 72 |ouble i|nside (r|
|000016f0| 2c 20 62 6c 6c 29 0a 73 | 74 72 75 63 74 20 72 61 |, bll).s|truct ra|
|00001700| 79 20 2a 72 3b 0a 73 74 | 72 75 63 74 20 62 61 6c |y *r;.st|ruct bal|
|00001710| 6c 20 2a 62 6c 6c 3b 0a | 7b 0a 20 20 20 20 73 74 |l *bll;.|{. st|
|00001720| 72 75 63 74 20 76 65 63 | 74 6f 72 20 20 20 6e 65 |ruct vec|tor ne|
|00001730| 77 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 20 |w,. | |
|00001740| 20 20 20 20 20 20 20 6e | 6f 72 6d 3b 0a 20 20 20 | n|orm;. |
|00001750| 20 73 74 72 75 63 74 20 | 6d 61 74 20 20 74 72 61 | struct |mat tra|
|00001760| 6e 73 3b 0a 20 20 20 20 | 73 74 72 75 63 74 20 72 |ns;. |struct r|
|00001770| 61 79 20 20 65 72 3b 0a | 20 20 20 20 64 6f 75 62 |ay er;.| doub|
|00001780| 6c 65 20 20 66 69 6e 64 | 6f 20 28 29 2c 20 6c 67 |le find|o (), lg|
|00001790| 68 74 2c 20 6c 2c 20 72 | 65 66 6b 20 28 29 2c 20 |ht, l, r|efk (), |
|000017a0| 67 65 74 63 61 70 74 20 | 28 29 2c 20 63 61 70 74 |getcapt |(), capt|
|000017b0| 3b 0a 20 20 20 20 64 6f | 75 62 6c 65 20 20 73 74 |;. do|uble st|
|000017c0| 75 70 69 64 3b 0a 20 20 | 20 20 73 74 72 75 63 74 |upid;. | struct|
|000017d0| 20 73 70 68 65 72 65 20 | 20 20 73 73 3b 0a 0a 0a | sphere | ss;...|
|000017e0| 20 20 20 20 69 66 20 28 | 2b 2b 72 6c 65 76 20 3c | if (|++rlev <|
|000017f0| 20 52 4c 45 56 29 20 7b | 0a 09 72 20 2d 3e 20 64 | RLEV) {|..r -> d|
|00001800| 69 72 2e 6c 20 3d 20 4c | 45 4e 20 28 72 20 2d 3e |ir.l = L|EN (r ->|
|00001810| 20 64 69 72 29 3b 0a 09 | 72 20 2d 3e 20 64 69 72 | dir);..|r -> dir|
|00001820| 2e 78 7a 6c 20 3d 20 58 | 5a 4c 20 28 72 20 2d 3e |.xzl = X|ZL (r ->|
|00001830| 20 64 69 72 29 3b 0a 09 | 6d 74 20 28 26 28 72 20 | dir);..|mt (&(r |
|00001840| 2d 3e 20 64 69 72 29 2c | 20 26 74 72 61 6e 73 29 |-> dir),| &trans)|
|00001850| 3b 0a 09 73 73 2e 72 61 | 64 20 3d 20 62 6c 6c 20 |;..ss.ra|d = bll |
|00001860| 2d 3e 20 73 2e 72 61 64 | 3b 0a 09 53 56 20 28 73 |-> s.rad|;..SV (s|
|00001870| 73 2e 63 65 6e 74 2c 20 | 62 6c 6c 20 2d 3e 20 73 |s.cent, |bll -> s|
|00001880| 2e 63 65 6e 74 2c 20 72 | 20 2d 3e 20 6f 72 67 29 |.cent, r| -> org)|
|00001890| 3b 0a 0a 09 6c 20 3d 20 | 66 69 6e 64 6f 20 28 26 |;...l = |findo (&|
|000018a0| 74 72 61 6e 73 2c 20 26 | 73 73 29 3b 0a 09 4d 56 |trans, &|ss);..MV|
|000018b0| 20 28 6c 20 2a 20 74 72 | 61 6e 73 2e 78 2e 78 2c | (l * tr|ans.x.x,|
|000018c0| 20 6c 20 2a 20 74 72 61 | 6e 73 2e 78 2e 79 2c 20 | l * tra|ns.x.y, |
|000018d0| 6c 20 2a 20 74 72 61 6e | 73 2e 78 2e 7a 2c 20 6e |l * tran|s.x.z, n|
|000018e0| 65 77 29 3b 0a 09 41 56 | 20 28 65 72 2e 6f 72 67 |ew);..AV| (er.org|
|000018f0| 2c 20 72 20 2d 3e 20 6f | 72 67 2c 20 6e 65 77 29 |, r -> o|rg, new)|
|00001900| 3b 0a 09 41 56 20 28 72 | 20 2d 3e 20 6f 72 67 2c |;..AV (r| -> org,|
|00001910| 20 72 20 2d 3e 20 6f 72 | 67 2c 20 6e 65 77 29 3b | r -> or|g, new);|
|00001920| 0a 09 53 56 20 28 6e 6f | 72 6d 2c 20 65 72 2e 6f |..SV (no|rm, er.o|
|00001930| 72 67 2c 20 62 6c 6c 20 | 2d 3e 20 73 2e 63 65 6e |rg, bll |-> s.cen|
|00001940| 74 29 3b 0a 0a 09 6e 6f | 72 6d 2e 6c 20 3d 20 62 |t);...no|rm.l = b|
|00001950| 6c 6c 20 2d 3e 20 73 2e | 72 61 64 3b 0a 09 63 61 |ll -> s.|rad;..ca|
|00001960| 70 74 20 3d 20 67 65 74 | 63 61 70 74 20 28 26 6e |pt = get|capt (&n|
|00001970| 6f 72 6d 2c 20 26 28 72 | 20 2d 3e 20 64 69 72 29 |orm, &(r| -> dir)|
|00001980| 2c 20 31 2e 30 20 2f 20 | 62 6c 6c 20 2d 3e 20 69 |, 1.0 / |bll -> i|
|00001990| 6f 72 29 3b 0a 0a 09 73 | 74 75 70 69 64 20 3d 20 |or);...s|tupid = |
|000019a0| 72 65 66 6b 20 28 26 6e | 6f 72 6d 2c 20 26 28 72 |refk (&n|orm, &(r|
|000019b0| 20 2d 3e 20 64 69 72 29 | 2c 20 31 2e 30 20 2f 20 | -> dir)|, 1.0 / |
|000019c0| 62 6c 6c 20 2d 3e 20 69 | 6f 72 29 3b 0a 09 53 43 |bll -> i|or);..SC|
|000019d0| 4d 4c 54 20 28 73 74 75 | 70 69 64 2c 20 6e 6f 72 |MLT (stu|pid, nor|
|000019e0| 6d 29 3b 0a 09 41 56 20 | 28 65 72 2e 64 69 72 2c |m);..AV |(er.dir,|
|000019f0| 20 6e 6f 72 6d 2c 20 72 | 20 2d 3e 20 64 69 72 29 | norm, r| -> dir)|
|00001a00| 3b 0a 0a 09 53 43 4d 4c | 54 20 28 31 2e 30 20 2f |;...SCML|T (1.0 /|
|00001a10| 20 6e 6f 72 6d 2e 6c 2c | 20 6e 6f 72 6d 29 3b 0a | norm.l,| norm);.|
|00001a20| 09 73 74 75 70 69 64 20 | 3d 20 32 2e 30 20 2a 20 |.stupid |= 2.0 * |
|00001a30| 44 4f 54 20 28 6e 6f 72 | 6d 2c 20 72 20 2d 3e 20 |DOT (nor|m, r -> |
|00001a40| 64 69 72 29 3b 0a 09 53 | 43 4d 4c 54 20 28 73 74 |dir);..S|CMLT (st|
|00001a50| 75 70 69 64 2c 20 6e 6f | 72 6d 29 3b 0a 09 53 56 |upid, no|rm);..SV|
|00001a60| 20 28 72 20 2d 3e 20 64 | 69 72 2c 20 72 20 2d 3e | (r -> d|ir, r ->|
|00001a70| 20 64 69 72 2c 20 6e 6f | 72 6d 29 3b 0a 09 6c 67 | dir, no|rm);..lg|
|00001a80| 68 74 20 3d 20 28 31 2e | 30 20 2d 20 63 61 70 74 |ht = (1.|0 - capt|
|00001a90| 29 20 2a 20 69 6e 73 69 | 64 65 20 28 72 2c 20 62 |) * insi|de (r, b|
|00001aa0| 6c 6c 29 20 2b 20 28 63 | 61 70 74 20 2a 20 28 64 |ll) + (c|apt * (d|
|00001ab0| 6f 75 62 6c 65 29 20 73 | 68 61 64 65 20 28 26 65 |ouble) s|hade (&e|
|00001ac0| 72 29 29 3b 0a 20 20 20 | 20 7d 0a 20 20 20 20 65 |r));. | }. e|
|00001ad0| 6c 73 65 0a 09 6c 67 68 | 74 20 3d 20 30 2e 30 3b |lse..lgh|t = 0.0;|
|00001ae0| 0a 20 20 20 20 72 6c 65 | 76 2d 2d 3b 0a 20 20 20 |. rle|v--;. |
|00001af0| 20 20 69 66 20 28 6c 67 | 68 74 3c 30 2e 30 29 20 | if (lg|ht<0.0) |
|00001b00| 6c 67 68 74 3d 30 2e 30 | 3b 0a 20 20 20 20 20 69 |lght=0.0|;. i|
|00001b10| 66 20 28 6c 67 68 74 3e | 32 35 35 2e 30 29 20 6c |f (lght>|255.0) l|
|00001b20| 67 68 74 3d 32 35 35 2e | 30 3b 0a 20 20 20 20 72 |ght=255.|0;. r|
|00001b30| 65 74 75 72 6e 20 28 6c | 67 68 74 29 3b 0a 7d 0a |eturn (l|ght);.}.|
|00001b40| 0a 0a 0a 64 6f 75 62 6c | 65 20 20 72 65 66 6b 20 |...doubl|e refk |
|00001b50| 28 6e 72 6d 2c 20 69 6e | 2c 20 69 6f 72 29 0a 73 |(nrm, in|, ior).s|
|00001b60| 74 72 75 63 74 20 76 65 | 63 74 6f 72 20 20 2a 6e |truct ve|ctor *n|
|00001b70| 72 6d 2c 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |rm,. | |
|00001b80| 20 20 20 2a 69 6e 3b 0a | 64 6f 75 62 6c 65 20 20 | *in;.|double |
|00001b90| 69 6f 72 3b 0a 7b 0a 20 | 20 20 20 64 6f 75 62 6c |ior;.{. | doubl|
|00001ba0| 65 20 20 64 74 2c 0a 20 | 20 20 20 20 20 20 20 20 |e dt,. | |
|00001bb0| 20 20 20 6c 6e 2c 0a 20 | 20 20 20 20 20 20 20 20 | ln,. | |
|00001bc0| 20 20 20 6c 69 2c 0a 20 | 20 20 20 20 20 20 20 20 | li,. | |
|00001bd0| 20 20 20 72 65 74 3b 0a | 0a 20 20 20 20 69 6f 72 | ret;.|. ior|
|00001be0| 20 3d 20 69 6f 72 20 2a | 20 69 6f 72 3b 0a 20 20 | = ior *| ior;. |
|00001bf0| 20 20 64 74 20 3d 20 44 | 4f 54 20 28 28 2a 6e 72 | dt = D|OT ((*nr|
|00001c00| 6d 29 2c 20 28 2a 69 6e | 29 29 3b 0a 20 20 20 20 |m), (*in|));. |
|00001c10| 6c 6e 20 3d 20 4c 4e 32 | 20 28 28 2a 6e 72 6d 29 |ln = LN2| ((*nrm)|
|00001c20| 29 3b 0a 20 20 20 20 6c | 69 20 3d 20 4c 4e 32 20 |);. l|i = LN2 |
|00001c30| 28 28 2a 69 6e 29 29 3b | 0a 20 20 20 20 69 66 20 |((*in));|. if |
|00001c40| 28 64 74 20 3c 20 30 29 | 0a 09 72 65 74 20 3d 20 |(dt < 0)|..ret = |
|00001c50| 28 2d 64 74 20 2d 20 73 | 71 72 74 20 28 64 74 20 |(-dt - s|qrt (dt |
|00001c60| 2a 20 64 74 20 2d 20 6c | 6e 20 2a 20 6c 69 20 2a |* dt - l|n * li *|
|00001c70| 20 28 31 20 2d 20 69 6f | 72 29 29 29 20 2f 20 6c | (1 - io|r))) / l|
|00001c80| 6e 3b 0a 20 20 20 20 65 | 6c 73 65 0a 09 72 65 74 |n;. e|lse..ret|
|00001c90| 20 3d 20 28 2d 64 74 20 | 2b 20 73 71 72 74 20 28 | = (-dt |+ sqrt (|
|00001ca0| 64 74 20 2a 20 64 74 20 | 2d 20 6c 6e 20 2a 20 6c |dt * dt |- ln * l|
|00001cb0| 69 20 2a 20 28 31 20 2d | 20 69 6f 72 29 29 29 20 |i * (1 -| ior))) |
|00001cc0| 2f 20 6c 6e 3b 0a 20 20 | 20 20 72 65 74 75 72 6e |/ ln;. | return|
|00001cd0| 20 28 72 65 74 29 3b 0a | 7d 0a 0a 64 6f 75 62 6c | (ret);.|}..doubl|
|00001ce0| 65 20 20 67 65 74 63 61 | 70 74 20 28 6e 72 6d 2c |e getca|pt (nrm,|
|00001cf0| 20 64 72 2c 20 69 6f 72 | 29 0a 73 74 72 75 63 74 | dr, ior|).struct|
|00001d00| 20 76 65 63 74 6f 72 20 | 20 2a 6e 72 6d 2c 0a 20 | vector | *nrm,. |
|00001d10| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 2a 64 | | *d|
|00001d20| 72 3b 0a 64 6f 75 62 6c | 65 20 20 69 6f 72 3b 0a |r;.doubl|e ior;.|
|00001d30| 7b 0a 20 20 20 20 64 6f | 75 62 6c 65 20 20 64 74 |{. do|uble dt|
|00001d40| 2c 0a 20 20 20 20 20 20 | 20 20 20 20 20 20 63 73 |,. | cs|
|00001d50| 31 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 63 |1,. | c|
|00001d60| 73 32 2c 0a 20 20 20 20 | 20 20 20 20 20 20 20 20 |s2,. | |
|00001d70| 70 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 73 |p,. | s|
|00001d80| 3b 0a 20 20 20 20 64 74 | 20 3d 20 44 4f 54 20 28 |;. dt| = DOT (|
|00001d90| 28 2a 6e 72 6d 29 2c 20 | 28 2a 64 72 29 29 3b 0a |(*nrm), |(*dr));.|
|00001da0| 20 20 20 20 64 74 20 3d | 20 64 74 20 2a 20 64 74 | dt =| dt * dt|
|00001db0| 20 2f 20 4c 4e 32 20 28 | 28 2a 6e 72 6d 29 29 20 | / LN2 (|(*nrm)) |
|00001dc0| 2f 20 4c 4e 32 20 28 28 | 2a 64 72 29 29 3b 0a 20 |/ LN2 ((|*dr));. |
|00001dd0| 20 20 20 63 73 31 20 3d | 20 73 71 72 74 20 28 64 | cs1 =| sqrt (d|
|00001de0| 74 29 3b 0a 20 20 20 20 | 63 73 32 20 3d 20 73 71 |t);. |cs2 = sq|
|00001df0| 72 74 20 28 31 2e 30 20 | 2d 20 28 31 2e 30 20 2d |rt (1.0 |- (1.0 -|
|00001e00| 20 64 74 29 20 2f 20 69 | 6f 72 29 3b 0a 20 20 20 | dt) / i|or);. |
|00001e10| 20 70 20 3d 20 63 73 31 | 20 2f 20 28 63 73 31 20 | p = cs1| / (cs1 |
|00001e20| 2b 20 69 6f 72 20 2a 20 | 63 73 32 29 3b 0a 20 20 |+ ior * |cs2);. |
|00001e30| 20 20 73 20 3d 20 63 73 | 31 20 2f 20 28 69 6f 72 | s = cs|1 / (ior|
|00001e40| 20 2a 20 63 73 31 20 2b | 20 63 73 32 29 3b 0a 20 | * cs1 +| cs2);. |
|00001e50| 20 20 20 72 65 74 75 72 | 6e 20 28 32 2e 30 20 2a | retur|n (2.0 *|
|00001e60| 20 28 70 20 2a 20 70 20 | 2b 20 73 20 2a 20 73 29 | (p * p |+ s * s)|
|00001e70| 29 3b 0a 7d 0a 40 2f 2f | 45 2a 4f 2a 46 20 72 65 |);.}.@//|E*O*F re|
|00001e80| 66 72 61 63 74 2e 63 2f | 2f 0a 63 68 6d 6f 64 20 |fract.c/|/.chmod |
|00001e90| 75 3d 72 77 2c 67 3d 72 | 2c 6f 3d 72 20 72 65 66 |u=rw,g=r|,o=r ref|
|00001ea0| 72 61 63 74 2e 63 0a 20 | 0a 65 63 68 6f 20 78 20 |ract.c. |.echo x |
|00001eb0| 2d 20 73 68 61 64 65 2e | 63 0a 73 65 64 20 27 73 |- shade.|c.sed 's|
|00001ec0| 2f 5e 40 2f 2f 27 20 3e | 20 22 73 68 61 64 65 2e |/^@//' >| "shade.|
|00001ed0| 63 22 20 3c 3c 27 40 2f | 2f 45 2a 4f 2a 46 20 73 |c" <<'@/|/E*O*F s|
|00001ee0| 68 61 64 65 2e 63 2f 2f | 27 0a 2f 2a 0a 20 2a 20 |hade.c//|'./*. * |
|00001ef0| 74 68 69 73 20 73 75 62 | 72 6f 75 74 69 6e 65 20 |this sub|routine |
|00001f00| 64 6f 65 73 20 61 6c 6c | 20 74 68 65 20 67 72 69 |does all| the gri|
|00001f10| 74 74 79 20 77 6f 72 6b | 2d 20 69 74 20 63 61 6c |tty work|- it cal|
|00001f20| 63 75 6c 61 74 65 73 20 | 0a 20 2a 20 77 68 61 74 |culates |. * what|
|00001f30| 20 73 68 61 64 65 20 65 | 61 63 68 20 70 69 78 65 | shade e|ach pixe|
|00001f40| 6c 20 73 68 6f 75 6c 64 | 20 62 65 2e 20 49 20 6c |l should| be. I l|
|00001f50| 69 6b 65 20 72 65 63 75 | 72 73 69 6f 6e 2e 0a 20 |ike recu|rsion.. |
|00001f60| 2a 2f 0a 23 69 6e 63 6c | 75 64 65 20 3c 6d 61 74 |*/.#incl|ude <mat|
|00001f70| 68 2e 68 3e 0a 23 69 6e | 63 6c 75 64 65 20 22 72 |h.h>.#in|clude "r|
|00001f80| 74 64 2e 68 22 0a 23 69 | 6e 63 6c 75 64 65 20 22 |td.h".#i|nclude "|
|00001f90| 6d 61 63 72 6f 73 2e 68 | 22 0a 23 69 6e 63 6c 75 |macros.h|".#inclu|
|00001fa0| 64 65 20 22 65 78 74 65 | 72 6e 2e 68 22 0a 0a 69 |de "exte|rn.h"..i|
|00001fb0| 6e 74 20 20 20 20 20 73 | 68 61 64 65 20 28 72 29 |nt s|hade (r)|
|00001fc0| 0a 73 74 72 75 63 74 20 | 72 61 79 20 2a 72 3b 0a |.struct |ray *r;.|
|00001fd0| 7b 0a 20 20 20 20 69 6e | 74 20 20 20 20 20 69 2c |{. in|t i,|
|00001fe0| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 63 2c 0a |. | c,.|
|00001ff0| 20 20 20 20 20 20 20 20 | 20 20 20 20 72 65 66 72 | | refr|
|00002000| 61 63 74 20 28 29 3b 0a | 20 20 20 20 73 74 72 75 |act ();.| stru|
|00002010| 63 74 20 72 61 79 20 20 | 72 65 66 72 3b 0a 20 20 |ct ray |refr;. |
|00002020| 20 20 64 6f 75 62 6c 65 | 20 20 6c 67 68 74 2c 0a | double| lght,.|
|00002030| 20 20 20 20 20 20 20 20 | 20 20 20 20 78 2c 0a 20 | | x,. |
|00002040| 20 20 20 20 20 20 20 20 | 20 20 20 79 2c 0a 20 20 | | y,. |
|00002050| 20 20 20 20 20 20 20 20 | 20 20 7a 2c 0a 20 20 20 | | z,. |
|00002060| 20 20 20 20 20 20 20 20 | 20 6c 2c 0a 20 20 20 20 | | l,. |
|00002070| 20 20 20 20 20 20 20 20 | 6b 2c 0a 20 20 20 20 20 | |k,. |
|00002080| 20 20 20 20 20 20 20 64 | 6f 74 20 28 29 2c 20 66 | d|ot (), f|
|00002090| 69 6e 64 20 28 29 2c 20 | 73 68 61 64 6f 77 20 28 |ind (), |shadow (|
|000020a0| 29 3b 0a 20 20 20 20 69 | 6e 74 20 20 20 20 20 73 |);. i|nt s|
|000020b0| 78 2c 0a 20 20 20 20 20 | 20 20 20 20 20 20 20 73 |x,. | s|
|000020c0| 79 3b 0a 20 20 20 20 64 | 6f 75 62 6c 65 20 20 73 |y;. d|ouble s|
|000020d0| 74 75 70 69 64 3b 0a 20 | 20 20 20 73 74 72 75 63 |tupid;. | struc|
|000020e0| 74 20 76 65 63 74 6f 72 | 20 20 20 6e 65 77 2c 0a |t vector| new,.|
|000020f0| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00002100| 20 20 20 20 6e 6f 72 6d | 3b 0a 20 20 20 20 73 74 | norm|;. st|
|00002110| 72 75 63 74 20 6d 61 74 | 20 20 74 72 61 6e 73 3b |ruct mat| trans;|
|00002120| 0a 20 20 20 20 73 74 72 | 75 63 74 20 73 70 68 65 |. str|uct sphe|
|00002130| 72 65 20 20 20 73 73 3b | 0a 20 20 20 20 69 66 20 |re ss;|. if |
|00002140| 28 2b 2b 6c 65 76 65 6c | 20 3c 3d 20 4c 45 56 45 |(++level| <= LEVE|
|00002150| 4c 29 20 7b 0a 09 63 20 | 3d 20 2d 31 3b 0a 09 6c |L) {..c |= -1;..l|
|00002160| 20 3d 20 48 55 47 45 3b | 0a 2f 2a 20 67 65 74 20 | = HUGE;|./* get |
|00002170| 76 65 63 74 6f 72 20 6c | 65 6e 67 74 68 20 61 6e |vector l|ength an|
|00002180| 64 20 78 7a 20 63 6f 6d | 70 6f 6e 65 6e 74 20 66 |d xz com|ponent f|
|00002190| 6f 72 20 6d 74 28 29 20 | 2a 2f 0a 09 72 20 2d 3e |or mt() |*/..r ->|
|000021a0| 20 64 69 72 2e 6c 20 3d | 20 4c 45 4e 20 28 72 20 | dir.l =| LEN (r |
|000021b0| 2d 3e 20 64 69 72 29 3b | 0a 09 72 20 2d 3e 20 64 |-> dir);|..r -> d|
|000021c0| 69 72 2e 78 7a 6c 20 3d | 20 58 5a 4c 20 28 72 20 |ir.xzl =| XZL (r |
|000021d0| 2d 3e 20 64 69 72 29 3b | 0a 2f 2a 20 6d 61 6b 65 |-> dir);|./* make|
|000021e0| 20 61 20 74 72 61 6e 73 | 66 6f 72 6d 20 6d 61 74 | a trans|form mat|
|000021f0| 72 69 78 20 74 68 61 74 | 20 72 6f 74 61 74 65 73 |rix that| rotates|
|00002200| 20 73 6f 6d 65 74 68 69 | 6e 67 20 69 6e 20 73 70 | somethi|ng in sp|
|00002210| 61 63 65 20 73 6f 0a 20 | 20 20 74 68 61 74 20 74 |ace so. | that t|
|00002220| 68 65 20 72 61 79 20 77 | 69 6c 6c 20 62 65 20 61 |he ray w|ill be a|
|00002230| 6c 69 67 6e 65 64 20 77 | 69 74 68 20 74 68 65 20 |ligned w|ith the |
|00002240| 78 20 61 78 69 73 20 2a | 2f 0a 09 6d 74 20 28 26 |x axis *|/..mt (&|
|00002250| 28 72 20 2d 3e 20 64 69 | 72 29 2c 20 26 74 72 61 |(r -> di|r), &tra|
|00002260| 6e 73 29 3b 0a 0a 2f 2a | 20 66 6f 72 20 73 74 61 |ns);../*| for sta|
|00002270| 72 74 65 72 73 20 77 65 | 20 66 69 6e 64 20 6f 75 |rters we| find ou|
|00002280| 74 20 77 68 65 74 68 65 | 72 20 77 65 20 68 69 74 |t whethe|r we hit|
|00002290| 20 61 6e 79 74 68 69 6e | 67 2e 20 2a 2f 0a 09 66 | anythin|g. */..f|
|000022a0| 6f 72 20 28 69 20 3d 20 | 30 3b 20 69 20 3c 20 6e |or (i = |0; i < n|
|000022b0| 6f 62 3b 20 69 2b 2b 29 | 20 7b 0a 09 20 20 20 20 |ob; i++)| {.. |
|000022c0| 73 73 2e 72 61 64 20 3d | 20 62 6c 5b 69 5d 20 2d |ss.rad =| bl[i] -|
|000022d0| 3e 20 73 2e 72 61 64 3b | 0a 09 20 20 20 20 53 56 |> s.rad;|.. SV|
|000022e0| 20 28 73 73 2e 63 65 6e | 74 2c 20 62 6c 5b 69 5d | (ss.cen|t, bl[i]|
|000022f0| 20 2d 3e 20 73 2e 63 65 | 6e 74 2c 20 72 20 2d 3e | -> s.ce|nt, r ->|
|00002300| 20 6f 72 67 29 3b 0a 09 | 20 20 20 20 69 66 20 28 | org);..| if (|
|00002310| 28 6b 20 3d 20 66 69 6e | 64 20 28 26 74 72 61 6e |(k = fin|d (&tran|
|00002320| 73 2c 20 26 73 73 29 29 | 20 3e 20 30 2e 30 20 26 |s, &ss))| > 0.0 &|
|00002330| 26 20 6b 20 3c 20 6c 29 | 20 7b 0a 09 09 63 20 3d |& k < l)| {...c =|
|00002340| 20 69 3b 0a 09 09 6c 20 | 3d 20 6b 3b 0a 09 20 20 | i;...l |= k;.. |
|00002350| 20 20 7d 0a 09 7d 0a 09 | 69 66 20 28 63 20 3e 3d | }..}..|if (c >=|
|00002360| 20 30 20 26 26 20 28 6c | 20 2a 20 74 72 61 6e 73 | 0 && (l| * trans|
|00002370| 2e 78 2e 79 20 2b 20 72 | 20 2d 3e 20 6f 72 67 2e |.x.y + r| -> org.|
|00002380| 79 29 20 3e 20 30 2e 30 | 29 20 7b 0a 09 09 09 09 |y) > 0.0|) {.....|
|00002390| 2f 2a 20 57 45 20 48 49 | 54 20 53 4f 4d 45 54 48 |/* WE HI|T SOMETH|
|000023a0| 49 4e 47 20 2a 2f 0a 09 | 20 20 20 20 4d 56 20 28 |ING */..| MV (|
|000023b0| 6c 20 2a 20 74 72 61 6e | 73 2e 78 2e 78 2c 20 6c |l * tran|s.x.x, l|
|000023c0| 20 2a 20 74 72 61 6e 73 | 2e 78 2e 79 2c 20 6c 20 | * trans|.x.y, l |
|000023d0| 2a 20 74 72 61 6e 73 2e | 78 2e 7a 2c 20 6e 65 77 |* trans.|x.z, new|
|000023e0| 29 3b 0a 09 20 20 20 20 | 6e 65 77 2e 6c 3d 6c 3b |);.. |new.l=l;|
|000023f0| 0a 2f 2a 20 6d 6f 76 65 | 20 74 68 65 20 6e 65 77 |./* move| the new|
|00002400| 20 6f 72 67 69 6e 20 6f | 66 20 74 68 65 20 72 61 | orgin o|f the ra|
|00002410| 79 20 74 6f 20 74 68 65 | 20 69 6e 74 65 72 73 65 |y to the| interse|
|00002420| 63 74 69 6f 6e 20 2a 2f | 0a 09 20 20 20 20 41 56 |ction */|.. AV|
|00002430| 20 28 72 65 66 72 2e 6f | 72 67 2c 20 6e 65 77 2c | (refr.o|rg, new,|
|00002440| 20 72 20 2d 3e 20 6f 72 | 67 29 3b 0a 09 20 20 20 | r -> or|g);.. |
|00002450| 20 41 56 20 28 72 20 2d | 3e 20 6f 72 67 2c 20 6e | AV (r -|> org, n|
|00002460| 65 77 2c 20 72 20 2d 3e | 20 6f 72 67 29 3b 0a 09 |ew, r ->| org);..|
|00002470| 20 20 20 20 4d 56 20 28 | 72 20 2d 3e 20 64 69 72 | MV (|r -> dir|
|00002480| 2e 78 2c 20 72 20 2d 3e | 20 64 69 72 2e 79 2c 20 |.x, r ->| dir.y, |
|00002490| 72 20 2d 3e 20 64 69 72 | 2e 7a 2c 20 72 65 66 72 |r -> dir|.z, refr|
|000024a0| 2e 64 69 72 29 3b 0a 2f | 2a 20 67 65 74 20 61 20 |.dir);./|* get a |
|000024b0| 6e 6f 72 6d 61 6c 20 76 | 65 63 74 6f 72 20 66 6f |normal v|ector fo|
|000024c0| 72 20 74 68 65 20 69 6e | 74 65 72 73 65 63 74 69 |r the in|tersecti|
|000024d0| 6f 6e 20 70 6f 69 6e 74 | 20 2a 2f 0a 09 20 20 20 |on point| */.. |
|000024e0| 20 53 56 20 28 6e 6f 72 | 6d 2c 20 72 20 2d 3e 20 | SV (nor|m, r -> |
|000024f0| 6f 72 67 2c 20 62 6c 5b | 63 5d 20 2d 3e 20 73 2e |org, bl[|c] -> s.|
|00002500| 63 65 6e 74 29 3b 0a 09 | 20 20 20 20 6e 6f 72 6d |cent);..| norm|
|00002510| 2e 6c 3d 62 6c 5b 63 5d | 20 2d 3e 73 2e 72 61 64 |.l=bl[c]| ->s.rad|
|00002520| 3b 0a 0a 2f 2a 20 61 6d | 62 69 65 6e 74 20 6c 69 |;../* am|bient li|
|00002530| 67 68 74 69 6e 67 20 2a | 2f 0a 09 20 20 20 20 6c |ghting *|/.. l|
|00002540| 67 68 74 20 3d 20 32 30 | 30 2e 30 20 2a 20 62 6c |ght = 20|0.0 * bl|
|00002550| 5b 63 5d 20 2d 3e 20 61 | 6d 62 3b 0a 0a 2f 2a 20 |[c] -> a|mb;../* |
|00002560| 73 68 61 64 65 64 20 6c | 69 67 68 74 69 6e 67 20 |shaded l|ighting |
|00002570| 28 64 69 66 66 75 73 65 | 29 2e 20 73 75 62 72 6f |(diffuse|). subro|
|00002580| 75 74 69 6e 65 20 73 68 | 61 64 6f 77 20 69 73 20 |utine sh|adow is |
|00002590| 69 6e 20 66 69 6e 64 2e | 63 20 2a 2f 0a 09 20 20 |in find.|c */.. |
|000025a0| 20 20 69 66 20 28 62 6c | 5b 63 5d 20 2d 3e 20 64 | if (bl|[c] -> d|
|000025b0| 69 66 20 21 3d 20 30 2e | 30 29 20 7b 0a 09 09 53 |if != 0.|0) {...S|
|000025c0| 56 20 28 6e 65 77 2c 20 | 6c 73 2e 63 65 6e 74 2c |V (new, |ls.cent,|
|000025d0| 20 72 20 2d 3e 20 6f 72 | 67 29 3b 0a 09 09 6e 65 | r -> or|g);...ne|
|000025e0| 77 2e 6c 20 3d 20 4c 45 | 4e 28 6e 65 77 29 3b 0a |w.l = LE|N(new);.|
|000025f0| 09 09 69 66 20 28 28 6b | 20 3d 20 44 4f 54 20 28 |..if ((k| = DOT (|
|00002600| 6e 65 77 2c 20 6e 6f 72 | 6d 29 29 20 3e 20 30 2e |new, nor|m)) > 0.|
|00002610| 30 29 0a 09 09 20 20 20 | 20 6c 67 68 74 20 2b 3d |0)... | lght +=|
|00002620| 20 62 6c 5b 63 5d 20 2d | 3e 20 64 69 66 20 2a 20 | bl[c] -|> dif * |
|00002630| 73 68 61 64 6f 77 20 28 | 26 28 72 20 2d 3e 20 6f |shadow (|&(r -> o|
|00002640| 72 67 29 29 20 2a 20 6b | 20 2f 20 28 6e 65 77 2e |rg)) * k| / (new.|
|00002650| 6c 29 20 2f 20 28 6e 6f | 72 6d 2e 6c 29 3b 0a 09 |l) / (no|rm.l);..|
|00002660| 20 20 20 20 7d 0a 0a 2f | 2a 72 65 66 6c 65 63 74 | }../|*reflect|
|00002670| 69 6f 6e 2e 2e 2e 20 65 | 61 73 79 20 2a 2f 0a 09 |ion... e|asy */..|
|00002680| 20 20 20 20 69 66 20 28 | 62 6c 5b 63 5d 20 2d 3e | if (|bl[c] ->|
|00002690| 20 72 66 6c 20 21 3d 20 | 30 2e 30 29 20 7b 0a 2f | rfl != |0.0) {./|
|000026a0| 2a 20 6d 61 6b 65 20 74 | 68 65 20 6e 6f 72 6d 61 |* make t|he norma|
|000026b0| 6c 20 75 6e 69 74 20 6c | 65 6e 67 74 68 20 2a 2f |l unit l|ength */|
|000026c0| 0a 09 09 53 43 4d 4c 54 | 20 28 28 31 2e 30 20 2f |...SCMLT| ((1.0 /|
|000026d0| 20 6e 6f 72 6d 2e 6c 29 | 2c 20 6e 6f 72 6d 29 3b | norm.l)|, norm);|
|000026e0| 0a 2f 2a 20 67 65 74 20 | 74 68 65 20 6c 65 6e 67 |./* get |the leng|
|000026f0| 74 68 20 6f 66 20 74 68 | 65 20 72 61 79 27 73 20 |th of th|e ray's |
|00002700| 63 6f 6d 70 6f 6e 65 6e | 74 20 69 6e 20 74 68 65 |componen|t in the|
|00002710| 20 6e 6f 72 6d 61 6c 20 | 64 69 72 65 63 74 69 6f | normal |directio|
|00002720| 6e 20 2a 2f 0a 09 09 73 | 74 75 70 69 64 20 3d 20 |n */...s|tupid = |
|00002730| 32 2e 30 20 2a 20 44 4f | 54 20 28 6e 6f 72 6d 2c |2.0 * DO|T (norm,|
|00002740| 20 72 20 2d 3e 20 64 69 | 72 29 3b 0a 09 09 53 43 | r -> di|r);...SC|
|00002750| 4d 4c 54 20 28 73 74 75 | 70 69 64 2c 20 6e 6f 72 |MLT (stu|pid, nor|
|00002760| 6d 29 3b 0a 2f 2a 20 73 | 75 62 74 72 61 63 74 20 |m);./* s|ubtract |
|00002770| 64 6f 75 62 6c 65 20 74 | 68 65 20 6e 6f 72 6d 61 |double t|he norma|
|00002780| 6c 20 63 6f 6d 70 6f 6e | 65 6e 74 2d 20 21 72 65 |l compon|ent- !re|
|00002790| 66 6c 65 63 74 69 6f 6e | 21 20 2a 2f 0a 09 09 53 |flection|! */...S|
|000027a0| 56 20 28 72 20 2d 3e 20 | 64 69 72 2c 20 72 20 2d |V (r -> |dir, r -|
|000027b0| 3e 20 64 69 72 2c 20 6e | 6f 72 6d 29 3b 0a 09 09 |> dir, n|orm);...|
|000027c0| 6c 67 68 74 20 2b 3d 20 | 62 6c 5b 63 5d 20 2d 3e |lght += |bl[c] ->|
|000027d0| 20 72 66 6c 20 2a 20 28 | 64 6f 75 62 6c 65 29 20 | rfl * (|double) |
|000027e0| 73 68 61 64 65 20 28 72 | 29 3b 0a 09 20 20 20 20 |shade (r|);.. |
|000027f0| 7d 0a 0a 2f 2a 20 72 65 | 66 72 61 63 74 69 6f 6e |}../* re|fraction|
|00002800| 2e 20 74 68 69 73 20 69 | 73 20 75 67 6c 79 2c 20 |. this i|s ugly, |
|00002810| 77 68 69 63 68 20 69 73 | 20 77 68 79 20 49 20 63 |which is| why I c|
|00002820| 68 6f 6f 73 65 20 74 6f | 20 64 65 61 6c 20 77 69 |hoose to| deal wi|
|00002830| 74 68 0a 20 20 20 69 74 | 20 69 6e 20 69 74 27 73 |th. it| in it's|
|00002840| 20 6f 77 6e 20 73 75 62 | 72 6f 75 74 69 6e 65 20 | own sub|routine |
|00002850| 77 68 69 63 68 20 63 6f | 6d 65 73 20 61 66 74 65 |which co|mes afte|
|00002860| 72 20 74 68 69 73 20 6f | 6e 65 20 2a 2f 0a 09 20 |r this o|ne */.. |
|00002870| 20 20 20 69 66 20 28 62 | 6c 5b 63 5d 20 2d 3e 20 | if (b|l[c] -> |
|00002880| 72 66 72 20 21 3d 20 30 | 2e 30 29 20 7b 0a 09 09 |rfr != 0|.0) {...|
|00002890| 6c 67 68 74 20 2b 3d 20 | 62 6c 5b 63 5d 20 2d 3e |lght += |bl[c] ->|
|000028a0| 20 72 66 72 20 2a 20 28 | 64 6f 75 62 6c 65 29 20 | rfr * (|double) |
|000028b0| 72 65 66 72 61 63 74 20 | 28 26 72 65 66 72 2c 20 |refract |(&refr, |
|000028c0| 62 6c 5b 63 5d 29 3b 0a | 09 20 20 20 20 7d 0a 0a |bl[c]);.|. }..|
|000028d0| 0a 0a 09 7d 0a 09 65 6c | 73 65 20 7b 09 09 09 2f |...}..el|se {.../|
|000028e0| 2a 20 68 69 74 20 6e 6f | 20 6f 62 6a 65 63 74 73 |* hit no| objects|
|000028f0| 2e 2e 2e 20 2a 2f 0a 09 | 20 20 20 20 69 66 20 28 |... */..| if (|
|00002900| 28 72 20 2d 3e 20 64 69 | 72 2e 79 29 20 3c 20 30 |(r -> di|r.y) < 0|
|00002910| 2e 30 29 20 7b 2f 2a 20 | 63 72 6f 73 73 65 73 20 |.0) {/* |crosses |
|00002920| 66 6c 6f 6f 72 20 2a 2f | 0a 09 09 7a 20 3d 20 2d |floor */|...z = -|
|00002930| 28 72 20 2d 3e 20 6f 72 | 67 2e 79 29 20 2f 20 28 |(r -> or|g.y) / (|
|00002940| 72 20 2d 3e 20 64 69 72 | 2e 79 29 3b 0a 09 09 28 |r -> dir|.y);...(|
|00002950| 72 20 2d 3e 20 6f 72 67 | 2e 78 29 20 2b 3d 20 7a |r -> org|.x) += z|
|00002960| 20 2a 20 28 72 20 2d 3e | 20 64 69 72 2e 78 29 3b | * (r ->| dir.x);|
|00002970| 0a 09 09 28 72 20 2d 3e | 20 6f 72 67 2e 7a 29 20 |...(r ->| org.z) |
|00002980| 2b 3d 20 7a 20 2a 20 28 | 72 20 2d 3e 20 64 69 72 |+= z * (|r -> dir|
|00002990| 2e 7a 29 3b 0a 09 09 28 | 72 20 2d 3e 20 6f 72 67 |.z);...(|r -> org|
|000029a0| 2e 79 29 20 3d 20 30 2e | 30 3b 0a 0a 09 09 53 56 |.y) = 0.|0;....SV|
|000029b0| 20 28 6e 65 77 2c 20 6c | 73 2e 63 65 6e 74 2c 20 | (new, l|s.cent, |
|000029c0| 72 20 2d 3e 20 6f 72 67 | 29 3b 0a 09 09 6e 65 77 |r -> org|);...new|
|000029d0| 2e 6c 20 3d 20 4c 45 4e | 28 6e 65 77 29 3b 0a 09 |.l = LEN|(new);..|
|000029e0| 09 73 78 20 3d 20 28 69 | 6e 74 29 20 28 72 20 2d |.sx = (i|nt) (r -|
|000029f0| 3e 20 6f 72 67 2e 78 20 | 2f 20 31 2e 35 29 20 25 |> org.x |/ 1.5) %|
|00002a00| 20 78 73 75 65 3b 0a 09 | 09 69 66 20 28 73 78 20 | xsue;..|.if (sx |
|00002a10| 3c 20 30 29 0a 09 09 20 | 20 20 20 73 78 20 2b 3d |< 0)... | sx +=|
|00002a20| 20 78 73 75 65 3b 0a 09 | 09 73 79 20 3d 20 2d 28 | xsue;..|.sy = -(|
|00002a30| 69 6e 74 29 20 28 72 20 | 2d 3e 20 6f 72 67 2e 7a |int) (r |-> org.z|
|00002a40| 20 2f 20 31 2e 35 29 20 | 25 20 79 73 75 65 3b 0a | / 1.5) |% ysue;.|
|00002a50| 09 09 69 66 20 28 73 79 | 20 3c 20 30 29 0a 09 09 |..if (sy| < 0)...|
|00002a60| 20 20 20 20 73 79 20 2b | 3d 20 79 73 75 65 3b 0a | sy +|= ysue;.|
|00002a70| 09 09 6c 67 68 74 20 3d | 20 28 73 61 6d 20 2a 20 |..lght =| (sam * |
|00002a80| 73 75 7a 69 65 5b 73 78 | 5d 5b 73 79 5d 20 2b 20 |suzie[sx|][sy] + |
|00002a90| 31 2e 30 20 2d 20 73 61 | 6d 29 20 2a 20 28 30 2e |1.0 - sa|m) * (0.|
|00002aa0| 38 20 2a 0a 09 09 09 73 | 68 61 64 6f 77 20 28 26 |8 *....s|hadow (&|
|00002ab0| 28 72 20 2d 3e 20 6f 72 | 67 29 29 20 2a 20 28 6e |(r -> or|g)) * (n|
|00002ac0| 65 77 2e 79 29 20 2f 20 | 28 6e 65 77 2e 6c 29 20 |ew.y) / |(new.l) |
|00002ad0| 2b 20 34 30 2e 30 29 3b | 0a 0a 0a 09 20 20 20 20 |+ 40.0);|.... |
|00002ae0| 7d 0a 09 20 20 20 20 65 | 6c 73 65 20 7b 09 09 2f |}.. e|lse {../|
|00002af0| 2a 20 63 68 65 63 6b 20 | 74 6f 20 73 65 65 20 69 |* check |to see i|
|00002b00| 66 20 69 74 20 68 69 74 | 20 6c 69 67 68 74 73 6f |f it hit| lightso|
|00002b10| 75 72 63 65 20 2a 2f 0a | 09 09 53 56 20 28 73 73 |urce */.|..SV (ss|
|00002b20| 2e 63 65 6e 74 2c 20 6c | 73 2e 63 65 6e 74 2c 20 |.cent, l|s.cent, |
|00002b30| 72 20 2d 3e 20 6f 72 67 | 29 3b 0a 09 09 73 73 2e |r -> org|);...ss.|
|00002b40| 72 61 64 20 3d 20 6c 73 | 2e 72 61 64 3b 0a 09 09 |rad = ls|.rad;...|
|00002b50| 69 66 20 28 66 69 6e 64 | 20 28 26 74 72 61 6e 73 |if (find| (&trans|
|00002b60| 2c 20 26 28 73 73 2e 63 | 65 6e 74 29 29 20 3e 20 |, &(ss.c|ent)) > |
|00002b70| 30 2e 30 29 0a 09 09 20 | 20 20 20 6c 67 68 74 20 |0.0)... | lght |
|00002b80| 3d 20 32 35 35 3b 0a 09 | 09 65 6c 73 65 0a 09 09 |= 255;..|.else...|
|00002b90| 20 20 20 20 6c 67 68 74 | 20 3d 20 30 3b 0a 09 20 | lght| = 0;.. |
|00002ba0| 20 20 20 7d 0a 09 7d 0a | 20 20 20 20 7d 0a 2f 2a | }..}.| }./*|
|00002bb0| 20 74 6f 20 6d 61 6e 79 | 20 6c 65 76 65 6c 73 20 | to many| levels |
|00002bc0| 72 65 74 75 72 6e 20 30 | 20 63 61 75 73 65 20 69 |return 0| cause i|
|00002bd0| 74 20 73 68 6f 75 6c 64 | 6e 27 74 20 6d 61 74 74 |t should|n't matt|
|00002be0| 65 72 20 2a 2f 0a 20 20 | 20 20 65 6c 73 65 0a 09 |er */. | else..|
|00002bf0| 6c 67 68 74 20 3d 20 30 | 3b 0a 20 20 20 20 6c 65 |lght = 0|;. le|
|00002c00| 76 65 6c 2d 2d 3b 0a 20 | 20 20 20 69 66 20 28 6c |vel--;. | if (l|
|00002c10| 67 68 74 20 3c 20 30 2e | 30 29 0a 09 6c 67 68 74 |ght < 0.|0)..lght|
|00002c20| 20 3d 20 30 2e 30 3b 0a | 20 20 20 20 69 66 20 28 | = 0.0;.| if (|
|00002c30| 6c 67 68 74 20 3e 20 32 | 35 35 2e 30 29 0a 09 6c |lght > 2|55.0)..l|
|00002c40| 67 68 74 20 3d 20 32 35 | 35 2e 30 3b 0a 20 20 20 |ght = 25|5.0;. |
|00002c50| 20 72 65 74 75 72 6e 20 | 28 28 69 6e 74 29 20 6c | return |((int) l|
|00002c60| 67 68 74 29 3b 0a 7d 0a | 40 2f 2f 45 2a 4f 2a 46 |ght);.}.|@//E*O*F|
|00002c70| 20 73 68 61 64 65 2e 63 | 2f 2f 0a 63 68 6d 6f 64 | shade.c|//.chmod|
|00002c80| 20 75 3d 72 77 2c 67 3d | 72 2c 6f 3d 72 20 73 68 | u=rw,g=|r,o=r sh|
|00002c90| 61 64 65 2e 63 0a 20 0a | 65 63 68 6f 20 78 20 2d |ade.c. .|echo x -|
|00002ca0| 20 73 75 70 70 6f 72 74 | 2e 63 0a 73 65 64 20 27 | support|.c.sed '|
|00002cb0| 73 2f 5e 40 2f 2f 27 20 | 3e 20 22 73 75 70 70 6f |s/^@//' |> "suppo|
|00002cc0| 72 74 2e 63 22 20 3c 3c | 27 40 2f 2f 45 2a 4f 2a |rt.c" <<|'@//E*O*|
|00002cd0| 46 20 73 75 70 70 6f 72 | 74 2e 63 2f 2f 27 0a 2f |F suppor|t.c//'./|
|00002ce0| 2a 0a 20 2a 20 20 20 20 | 73 75 70 70 6f 72 74 69 |*. * |supporti|
|00002cf0| 76 65 20 73 75 62 72 6f | 75 74 69 6e 65 73 2e 2e |ve subro|utines..|
|00002d00| 2e 0a 20 2a 2f 0a 0a 23 | 69 6e 63 6c 75 64 65 20 |.. */..#|include |
|00002d10| 3c 6d 61 74 68 2e 68 3e | 0a 23 69 6e 63 6c 75 64 |<math.h>|.#includ|
|00002d20| 65 20 3c 73 74 64 69 6f | 2e 68 3e 0a 23 69 6e 63 |e <stdio|.h>.#inc|
|00002d30| 6c 75 64 65 20 22 72 74 | 64 2e 68 22 0a 23 69 6e |lude "rt|d.h".#in|
|00002d40| 63 6c 75 64 65 20 22 65 | 78 74 65 72 6e 2e 68 22 |clude "e|xtern.h"|
|00002d50| 0a 0a 0a 6d 74 20 28 76 | 65 63 2c 20 74 72 61 6e |...mt (v|ec, tran|
|00002d60| 73 29 0a 73 74 72 75 63 | 74 20 76 65 63 74 6f 72 |s).struc|t vector|
|00002d70| 20 20 2a 76 65 63 3b 0a | 73 74 72 75 63 74 20 6d | *vec;.|struct m|
|00002d80| 61 74 20 2a 74 72 61 6e | 73 3b 0a 7b 0a 20 20 20 |at *tran|s;.{. |
|00002d90| 20 69 66 20 28 76 65 63 | 20 2d 3e 20 78 7a 6c 20 | if (vec| -> xzl |
|00002da0| 3d 3d 20 30 2e 30 29 20 | 7b 0a 09 74 72 61 6e 73 |== 0.0) |{..trans|
|00002db0| 20 2d 3e 20 78 2e 78 20 | 3d 20 30 2e 30 3b 0a 09 | -> x.x |= 0.0;..|
|00002dc0| 74 72 61 6e 73 20 2d 3e | 20 78 2e 79 20 3d 20 31 |trans ->| x.y = 1|
|00002dd0| 2e 30 3b 0a 09 74 72 61 | 6e 73 20 2d 3e 20 78 2e |.0;..tra|ns -> x.|
|00002de0| 7a 20 3d 20 30 2e 30 3b | 0a 09 74 72 61 6e 73 20 |z = 0.0;|..trans |
|00002df0| 2d 3e 20 79 2e 78 20 3d | 20 2d 31 2e 30 3b 0a 09 |-> y.x =| -1.0;..|
|00002e00| 74 72 61 6e 73 20 2d 3e | 20 79 2e 79 20 3d 20 30 |trans ->| y.y = 0|
|00002e10| 2e 30 3b 0a 09 74 72 61 | 6e 73 20 2d 3e 20 79 2e |.0;..tra|ns -> y.|
|00002e20| 7a 20 3d 20 30 2e 30 3b | 0a 09 74 72 61 6e 73 20 |z = 0.0;|..trans |
|00002e30| 2d 3e 20 7a 2e 78 20 3d | 20 30 2e 30 3b 0a 09 74 |-> z.x =| 0.0;..t|
|00002e40| 72 61 6e 73 20 2d 3e 20 | 7a 2e 79 20 3d 20 30 2e |rans -> |z.y = 0.|
|00002e50| 30 3b 0a 09 74 72 61 6e | 73 20 2d 3e 20 7a 2e 7a |0;..tran|s -> z.z|
|00002e60| 20 3d 20 31 2e 30 3b 0a | 20 20 20 20 7d 0a 20 20 | = 1.0;.| }. |
|00002e70| 20 20 65 6c 73 65 20 7b | 0a 09 74 72 61 6e 73 20 | else {|..trans |
|00002e80| 2d 3e 20 78 2e 78 20 3d | 20 28 76 65 63 20 2d 3e |-> x.x =| (vec ->|
|00002e90| 20 78 29 20 2f 20 28 76 | 65 63 20 2d 3e 20 6c 29 | x) / (v|ec -> l)|
|00002ea0| 3b 0a 09 74 72 61 6e 73 | 20 2d 3e 20 78 2e 79 20 |;..trans| -> x.y |
|00002eb0| 3d 20 28 76 65 63 20 2d | 3e 20 79 29 20 2f 20 28 |= (vec -|> y) / (|
|00002ec0| 76 65 63 20 2d 3e 20 6c | 29 3b 0a 09 74 72 61 6e |vec -> l|);..tran|
|00002ed0| 73 20 2d 3e 20 78 2e 7a | 20 3d 20 28 76 65 63 20 |s -> x.z| = (vec |
|00002ee0| 2d 3e 20 7a 29 20 2f 20 | 28 76 65 63 20 2d 3e 20 |-> z) / |(vec -> |
|00002ef0| 6c 29 3b 0a 09 74 72 61 | 6e 73 20 2d 3e 20 79 2e |l);..tra|ns -> y.|
|00002f00| 78 20 3d 20 2d 28 76 65 | 63 20 2d 3e 20 78 29 20 |x = -(ve|c -> x) |
|00002f10| 2a 20 28 76 65 63 20 2d | 3e 20 79 29 20 2f 20 28 |* (vec -|> y) / (|
|00002f20| 28 76 65 63 20 2d 3e 20 | 6c 29 20 2a 20 28 76 65 |(vec -> |l) * (ve|
|00002f30| 63 20 2d 3e 20 78 7a 6c | 29 29 3b 0a 09 74 72 61 |c -> xzl|));..tra|
|00002f40| 6e 73 20 2d 3e 20 79 2e | 79 20 3d 20 28 76 65 63 |ns -> y.|y = (vec|
|00002f50| 20 2d 3e 20 78 7a 6c 29 | 20 2f 20 28 76 65 63 20 | -> xzl)| / (vec |
|00002f60| 2d 3e 20 6c 29 3b 0a 09 | 74 72 61 6e 73 20 2d 3e |-> l);..|trans ->|
|00002f70| 20 79 2e 7a 20 3d 20 2d | 28 76 65 63 20 2d 3e 20 | y.z = -|(vec -> |
|00002f80| 7a 29 20 2a 20 28 76 65 | 63 20 2d 3e 20 79 29 20 |z) * (ve|c -> y) |
|00002f90| 2f 20 28 28 76 65 63 20 | 2d 3e 20 6c 29 20 2a 20 |/ ((vec |-> l) * |
|00002fa0| 28 76 65 63 20 2d 3e 20 | 78 7a 6c 29 29 3b 0a 09 |(vec -> |xzl));..|
|00002fb0| 74 72 61 6e 73 20 2d 3e | 20 7a 2e 78 20 3d 20 2d |trans ->| z.x = -|
|00002fc0| 28 76 65 63 20 2d 3e 20 | 7a 29 20 2f 20 28 76 65 |(vec -> |z) / (ve|
|00002fd0| 63 20 2d 3e 20 78 7a 6c | 29 3b 0a 09 74 72 61 6e |c -> xzl|);..tran|
|00002fe0| 73 20 2d 3e 20 7a 2e 79 | 20 3d 20 30 3b 0a 09 74 |s -> z.y| = 0;..t|
|00002ff0| 72 61 6e 73 20 2d 3e 20 | 7a 2e 7a 20 3d 20 28 76 |rans -> |z.z = (v|
|00003000| 65 63 20 2d 3e 20 78 29 | 20 2f 20 28 76 65 63 20 |ec -> x)| / (vec |
|00003010| 2d 3e 20 78 7a 6c 29 3b | 0a 20 20 20 20 7d 0a 7d |-> xzl);|. }.}|
|00003020| 0a 40 2f 2f 45 2a 4f 2a | 46 20 73 75 70 70 6f 72 |.@//E*O*|F suppor|
|00003030| 74 2e 63 2f 2f 0a 63 68 | 6d 6f 64 20 75 3d 72 77 |t.c//.ch|mod u=rw|
|00003040| 2c 67 3d 72 2c 6f 3d 72 | 20 73 75 70 70 6f 72 74 |,g=r,o=r| support|
|00003050| 2e 63 0a 20 0a 65 63 68 | 6f 20 78 20 2d 20 74 72 |.c. .ech|o x - tr|
|00003060| 61 63 65 72 2e 63 0a 73 | 65 64 20 27 73 2f 5e 40 |acer.c.s|ed 's/^@|
|00003070| 2f 2f 27 20 3e 20 22 74 | 72 61 63 65 72 2e 63 22 |//' > "t|racer.c"|
|00003080| 20 3c 3c 27 40 2f 2f 45 | 2a 4f 2a 46 20 74 72 61 | <<'@//E|*O*F tra|
|00003090| 63 65 72 2e 63 2f 2f 27 | 0a 0a 0a 2f 2a 20 74 72 |cer.c//'|.../* tr|
|000030a0| 61 63 65 72 20 76 65 72 | 73 69 6f 6e 20 32 2e 31 |acer ver|sion 2.1|
|000030b0| 20 2a 2f 0a 23 69 6e 63 | 6c 75 64 65 20 3c 73 74 | */.#inc|lude <st|
|000030c0| 64 69 6f 2e 68 3e 0a 23 | 69 6e 63 6c 75 64 65 20 |dio.h>.#|include |
|000030d0| 3c 6d 61 74 68 2e 68 3e | 0a 23 69 6e 63 6c 75 64 |<math.h>|.#includ|
|000030e0| 65 20 22 72 74 64 2e 68 | 22 0a 23 69 6e 63 6c 75 |e "rtd.h|".#inclu|
|000030f0| 64 65 20 22 6d 61 63 72 | 6f 73 2e 68 22 0a 0a 0a |de "macr|os.h"...|
|00003100| 46 49 4c 45 20 2a 20 66 | 70 3b 0a 64 6f 75 62 6c |FILE * f|p;.doubl|
|00003110| 65 20 20 73 75 7a 69 65 | 5b 33 30 30 5d 5b 33 30 |e suzie|[300][30|
|00003120| 30 5d 2c 0a 20 20 20 20 | 20 20 20 20 73 61 6d 20 |0],. | sam |
|00003130| 3d 20 31 2e 30 3b 0a 69 | 6e 74 20 20 20 20 20 78 |= 1.0;.i|nt x|
|00003140| 73 75 65 2c 0a 20 20 20 | 20 20 20 20 20 79 73 75 |sue,. | ysu|
|00003150| 65 3b 0a 73 74 72 75 63 | 74 20 62 61 6c 6c 20 2a |e;.struc|t ball *|
|00003160| 62 6c 5b 31 35 30 5d 3b | 0a 69 6e 74 20 20 20 20 |bl[150];|.int |
|00003170| 20 6c 65 76 65 6c 2c 0a | 20 20 20 20 20 20 20 20 | level,.| |
|00003180| 6e 6f 62 3b 0a 73 74 72 | 75 63 74 20 73 70 68 65 |nob;.str|uct sphe|
|00003190| 72 65 20 20 20 6c 73 3b | 0a 0a 6d 61 69 6e 20 28 |re ls;|..main (|
|000031a0| 61 72 67 63 2c 20 61 72 | 67 76 29 0a 69 6e 74 20 |argc, ar|gv).int |
|000031b0| 20 20 20 20 61 72 67 63 | 3b 0a 63 68 61 72 20 20 | argc|;.char |
|000031c0| 2a 2a 61 72 67 76 3b 0a | 7b 0a 20 20 20 20 46 49 |**argv;.|{. FI|
|000031d0| 4c 45 20 2a 20 64 66 2c | 20 2a 74 65 78 66 69 6c |LE * df,| *texfil|
|000031e0| 65 3b 0a 20 20 20 20 73 | 74 61 74 69 63 20 64 6f |e;. s|tatic do|
|000031f0| 75 62 6c 65 20 20 20 78 | 63 6f 2c 0a 20 20 20 20 |uble x|co,. |
|00003200| 20 20 20 20 20 20 20 20 | 20 20 20 20 20 20 20 20 | | |
|00003210| 79 63 6f 3b 0a 20 20 20 | 20 73 74 72 75 63 74 20 |yco;. | struct |
|00003220| 72 61 79 20 20 72 72 3b | 0a 20 20 20 20 73 74 72 |ray rr;|. str|
|00003230| 75 63 74 20 76 65 63 74 | 6f 72 20 20 20 76 70 3b |uct vect|or vp;|
|00003240| 0a 20 20 20 20 64 6f 75 | 62 6c 65 20 20 78 2c 0a |. dou|ble x,.|
|00003250| 20 20 20 20 20 20 20 20 | 20 20 20 20 79 2c 0a 20 | | y,. |
|00003260| 20 20 20 20 20 20 20 20 | 20 20 20 7a 3b 0a 20 20 | | z;. |
|00003270| 20 20 69 6e 74 20 20 20 | 20 20 69 2c 0a 20 20 20 | int | i,. |
|00003280| 20 20 20 20 20 20 20 20 | 20 69 6e 20 3d 20 30 2c | | in = 0,|
|00003290| 0a 20 20 20 20 20 20 20 | 20 20 20 20 20 6f 75 74 |. | out|
|000032a0| 20 3d 20 30 2c 0a 20 20 | 20 20 20 20 20 20 20 20 | = 0,. | |
|000032b0| 20 20 74 65 78 20 3d 20 | 30 3b 0a 20 20 20 20 69 | tex = |0;. i|
|000032c0| 6e 74 20 20 20 20 20 63 | 3b 0a 0a 2f 2a 20 63 6f |nt c|;../* co|
|000032d0| 6d 6d 61 6e 64 20 69 6e | 74 65 72 70 20 2a 2f 0a |mmand in|terp */.|
|000032e0| 0a 20 20 20 20 66 6f 72 | 20 28 69 20 3d 20 31 3b |. for| (i = 1;|
|000032f0| 20 69 20 3c 20 61 72 67 | 63 3b 20 69 2b 2b 29 20 | i < arg|c; i++) |
|00003300| 7b 0a 09 69 66 20 28 61 | 72 67 76 5b 69 5d 5b 30 |{..if (a|rgv[i][0|
|00003310| 5d 20 21 3d 20 27 2d 27 | 29 0a 09 20 20 20 20 62 |] != '-'|).. b|
|00003320| 6f 6f 62 6f 6f 20 28 22 | 4f 70 74 69 6f 6e 73 20 |ooboo ("|Options |
|00003330| 73 74 72 74 20 77 69 74 | 68 20 61 20 27 2d 27 20 |strt wit|h a '-' |
|00003340| 62 6f 7a 6f 22 29 3b 0a | 09 63 20 3d 20 61 72 67 |bozo");.|.c = arg|
|00003350| 76 5b 69 5d 5b 31 5d 3b | 0a 0a 09 73 77 69 74 63 |v[i][1];|...switc|
|00003360| 68 20 28 63 29 20 7b 0a | 09 20 20 20 20 63 61 73 |h (c) {.|. cas|
|00003370| 65 20 28 27 69 27 29 3a | 20 0a 09 09 69 66 20 28 |e ('i'):| ...if (|
|00003380| 69 6e 29 0a 09 09 20 20 | 20 20 62 6f 6f 62 6f 6f |in)... | booboo|
|00003390| 20 28 22 53 6f 72 72 79 | 2c 20 62 75 74 20 79 6f | ("Sorry|, but yo|
|000033a0| 75 20 6d 61 79 20 6f 6e | 6c 79 20 68 61 76 65 20 |u may on|ly have |
|000033b0| 6f 6e 65 20 69 6e 70 75 | 74 20 66 69 6c 65 22 29 |one inpu|t file")|
|000033c0| 3b 0a 09 09 69 6e 20 3d | 20 31 3b 0a 09 09 69 66 |;...in =| 1;...if|
|000033d0| 20 28 28 69 20 2b 20 31 | 29 20 3e 3d 20 61 72 67 | ((i + 1|) >= arg|
|000033e0| 63 20 7c 7c 20 61 72 67 | 76 5b 69 20 2b 20 31 5d |c || arg|v[i + 1]|
|000033f0| 5b 30 5d 20 3d 3d 20 27 | 2d 27 29 2f 2a 20 6e 6f |[0] == '|-')/* no|
|00003400| 20 61 72 67 20 2a 2f 0a | 09 09 20 20 20 20 64 66 | arg */.|.. df|
|00003410| 20 3d 20 73 74 64 69 6e | 3b 0a 09 09 65 6c 73 65 | = stdin|;...else|
|00003420| 0a 09 09 20 20 20 20 69 | 66 20 28 28 64 66 20 3d |... i|f ((df =|
|00003430| 20 66 6f 70 65 6e 20 28 | 61 72 67 76 5b 2b 2b 69 | fopen (|argv[++i|
|00003440| 5d 2c 20 22 72 22 29 29 | 20 3d 3d 20 4e 55 4c 4c |], "r"))| == NULL|
|00003450| 29 0a 09 09 09 62 6f 6f | 62 6f 6f 20 28 22 69 6e |)....boo|boo ("in|
|00003460| 70 75 74 20 66 69 6c 65 | 20 6e 6f 74 20 66 6f 75 |put file| not fou|
|00003470| 6e 64 22 29 3b 0a 09 09 | 62 72 65 61 6b 3b 0a 09 |nd");...|break;..|
|00003480| 20 20 20 20 63 61 73 65 | 20 28 27 6f 27 29 3a 20 | case| ('o'): |
|00003490| 0a 09 09 69 66 20 28 6f | 75 74 29 0a 09 09 20 20 |...if (o|ut)... |
|000034a0| 20 20 62 6f 6f 62 6f 6f | 20 28 22 53 6f 72 72 79 | booboo| ("Sorry|
|000034b0| 2c 20 62 75 74 20 79 6f | 75 20 6d 61 79 20 68 61 |, but yo|u may ha|
|000034c0| 76 65 20 6f 6e 6c 79 20 | 6f 6e 65 20 6f 75 74 70 |ve only |one outp|
|000034d0| 75 74 20 66 69 6c 65 22 | 29 3b 0a 09 09 6f 75 74 |ut file"|);...out|
|000034e0| 20 3d 20 31 3b 0a 09 09 | 69 66 20 28 28 69 20 2b | = 1;...|if ((i +|
|000034f0| 20 31 29 20 3e 3d 20 61 | 72 67 63 20 7c 7c 20 61 | 1) >= a|rgc || a|
|00003500| 72 67 76 5b 69 20 2b 20 | 31 5d 5b 30 5d 20 3d 3d |rgv[i + |1][0] ==|
|00003510| 20 27 2d 27 29 2f 2a 20 | 6e 6f 20 61 72 67 20 2a | '-')/* |no arg *|
|00003520| 2f 0a 09 09 20 20 20 20 | 66 70 20 3d 20 73 74 64 |/... |fp = std|
|00003530| 6f 75 74 3b 0a 09 09 65 | 6c 73 65 0a 09 09 20 20 |out;...e|lse... |
|00003540| 20 20 66 70 20 3d 20 66 | 6f 70 65 6e 20 28 61 72 | fp = f|open (ar|
|00003550| 67 76 5b 2b 2b 69 5d 2c | 20 22 77 22 29 3b 0a 09 |gv[++i],| "w");..|
|00003560| 09 62 72 65 61 6b 3b 0a | 09 20 20 20 20 63 61 73 |.break;.|. cas|
|00003570| 65 20 28 27 73 27 29 3a | 20 0a 09 09 69 66 20 28 |e ('s'):| ...if (|
|00003580| 74 65 78 29 0a 09 09 20 | 20 20 20 62 6f 6f 62 6f |tex)... | boobo|
|00003590| 6f 20 28 22 53 6f 72 72 | 79 2c 20 62 75 74 20 79 |o ("Sorr|y, but y|
|000035a0| 6f 75 20 6d 61 79 20 68 | 61 76 65 20 6f 6e 6c 79 |ou may h|ave only|
|000035b0| 20 6f 6e 65 20 69 6d 61 | 67 65 20 66 69 6c 65 22 | one ima|ge file"|
|000035c0| 29 3b 0a 09 09 69 66 20 | 28 28 69 20 2b 20 31 29 |);...if |((i + 1)|
|000035d0| 20 3e 3d 20 61 72 67 63 | 20 7c 7c 20 61 72 67 76 | >= argc| || argv|
|000035e0| 5b 69 20 2b 20 31 5d 5b | 30 5d 20 3d 3d 20 27 2d |[i + 1][|0] == '-|
|000035f0| 27 29 2f 2a 20 6e 6f 20 | 61 72 67 20 2a 2f 0a 09 |')/* no |arg */..|
|00003600| 09 20 20 20 20 62 6f 6f | 62 6f 6f 20 28 22 2d 73 |. boo|boo ("-s|
|00003610| 20 72 65 71 75 69 72 65 | 73 20 61 6e 20 61 72 67 | require|s an arg|
|00003620| 75 6d 65 6e 74 22 29 3b | 0a 09 09 74 65 78 20 3d |ument");|...tex =|
|00003630| 20 31 3b 0a 09 09 69 66 | 20 28 28 74 65 78 66 69 | 1;...if| ((texfi|
|00003640| 6c 65 20 3d 20 66 6f 70 | 65 6e 20 28 61 72 67 76 |le = fop|en (argv|
|00003650| 5b 2b 2b 69 5d 2c 20 22 | 72 22 29 29 20 3d 3d 20 |[++i], "|r")) == |
|00003660| 4e 55 4c 4c 29 0a 09 09 | 20 20 20 20 62 6f 6f 62 |NULL)...| boob|
|00003670| 6f 6f 20 28 22 69 6d 61 | 67 65 20 66 69 6c 65 20 |oo ("ima|ge file |
|00003680| 6e 6f 74 20 66 6f 75 6e | 64 22 29 3b 0a 09 09 62 |not foun|d");...b|
|00003690| 72 65 61 6b 3b 0a 09 09 | 62 6f 6f 62 6f 6f 20 28 |reak;...|booboo (|
|000036a0| 22 74 68 69 73 20 6c 69 | 6e 65 20 73 68 6f 75 6c |"this li|ne shoul|
|000036b0| 64 6e 27 74 20 64 6f 20 | 61 6e 79 74 68 69 6e 67 |dn't do |anything|
|000036c0| 22 29 3b 0a 09 20 20 20 | 20 63 61 73 65 20 28 27 |");.. | case ('|
|000036d0| 53 27 29 3a 20 0a 09 09 | 69 66 20 28 61 72 67 76 |S'): ...|if (argv|
|000036e0| 5b 69 5d 5b 32 5d 20 3c | 20 27 30 27 20 7c 7c 20 |[i][2] <| '0' || |
|000036f0| 61 72 67 76 5b 69 5d 5b | 32 5d 20 3e 20 27 39 27 |argv[i][|2] > '9'|
|00003700| 29 7b 0a 70 72 69 6e 74 | 66 28 22 25 63 5c 6e 22 |){.print|f("%c\n"|
|00003710| 2c 61 72 67 76 5b 69 5d | 5b 32 5d 29 3b 0a 09 09 |,argv[i]|[2]);...|
|00003720| 20 20 20 20 62 6f 6f 62 | 6f 6f 20 28 22 2d 53 20 | boob|oo ("-S |
|00003730| 6e 65 65 64 73 20 61 20 | 6e 75 6d 65 72 69 63 61 |needs a |numerica|
|00003740| 6c 20 61 72 67 75 6d 65 | 6e 74 22 29 3b 7d 0a 09 |l argume|nt");}..|
|00003750| 09 73 61 6d 20 3d 20 61 | 74 6f 66 20 28 26 28 61 |.sam = a|tof (&(a|
|00003760| 72 67 76 5b 69 5d 5b 32 | 5d 29 29 3b 0a 09 09 62 |rgv[i][2|]));...b|
|00003770| 72 65 61 6b 3b 0a 09 20 | 20 20 20 64 65 66 61 75 |reak;.. | defau|
|00003780| 6c 74 3a 20 0a 09 09 62 | 6f 6f 62 6f 6f 20 28 22 |lt: ...b|ooboo ("|
|00003790| 55 6e 72 65 63 6f 67 6e | 69 7a 65 64 20 6f 70 74 |Unrecogn|ized opt|
|000037a0| 69 6f 6e 2e 20 42 65 74 | 74 65 72 20 74 72 79 20 |ion. Bet|ter try |
|000037b0| 61 67 61 69 6e 22 29 3b | 0a 09 7d 0a 20 20 20 20 |again");|..}. |
|000037c0| 7d 0a 0a 0a 20 20 20 20 | 69 66 20 28 21 69 6e 29 |}... |if (!in)|
|000037d0| 0a 09 69 66 20 28 28 64 | 66 20 3d 20 66 6f 70 65 |..if ((d|f = fope|
|000037e0| 6e 20 28 22 62 64 61 74 | 61 2e 69 22 2c 20 22 72 |n ("bdat|a.i", "r|
|000037f0| 22 29 29 20 3d 3d 20 4e | 55 4c 4c 29 0a 09 20 20 |")) == N|ULL).. |
|00003800| 20 20 62 6f 6f 62 6f 6f | 20 28 22 62 64 61 74 61 | booboo| ("bdata|
|00003810| 2e 69 20 6e 6f 74 20 66 | 6f 75 6e 64 22 29 3b 0a |.i not f|ound");.|
|00003820| 20 20 20 20 69 66 20 28 | 21 6f 75 74 29 0a 09 66 | if (|!out)..f|
|00003830| 70 20 3d 20 66 6f 70 65 | 6e 20 28 22 64 61 74 61 |p = fope|n ("data|
|00003840| 2e 64 69 73 22 2c 20 22 | 77 22 29 3b 0a 20 20 20 |.dis", "|w");. |
|00003850| 20 69 66 20 28 21 74 65 | 78 29 0a 09 69 66 20 28 | if (!te|x)..if (|
|00003860| 28 74 65 78 66 69 6c 65 | 20 3d 20 66 6f 70 65 6e |(texfile| = fopen|
|00003870| 20 28 22 70 61 74 2e 64 | 65 66 22 2c 20 22 72 22 | ("pat.d|ef", "r"|
|00003880| 29 29 20 3d 3d 20 4e 55 | 4c 4c 29 0a 09 20 20 20 |)) == NU|LL).. |
|00003890| 20 62 6f 6f 62 6f 6f 20 | 28 22 70 61 74 2e 64 65 | booboo |("pat.de|
|000038a0| 66 20 6e 6f 74 20 66 6f | 75 6e 64 22 29 3b 0a 0a |f not fo|und");..|
|000038b0| 0a 0a 20 20 20 20 6e 6f | 62 20 3d 20 67 5f 62 61 |.. no|b = g_ba|
|000038c0| 6c 20 28 64 66 29 3b 0a | 20 20 20 20 67 5f 62 6f |l (df);.| g_bo|
|000038d0| 64 20 28 74 65 78 66 69 | 6c 65 29 3b 0a 0a 0a 0a |d (texfi|le);....|
|000038e0| 20 20 20 20 4d 56 20 28 | 39 35 2e 30 2c 20 31 34 | MV (|95.0, 14|
|000038f0| 30 2e 30 2c 20 2d 32 30 | 30 2e 30 2c 20 76 70 29 |0.0, -20|0.0, vp)|
|00003900| 3b 0a 20 20 20 20 4d 56 | 20 28 30 2e 30 2c 20 39 |;. MV| (0.0, 9|
|00003910| 30 30 2e 30 2c 20 30 2e | 30 2c 20 6c 73 2e 63 65 |00.0, 0.|0, ls.ce|
|00003920| 6e 74 29 3b 0a 20 20 20 | 20 6c 73 2e 72 61 64 20 |nt);. | ls.rad |
|00003930| 3d 20 34 30 3b 0a 20 20 | 20 20 66 70 72 69 6e 74 |= 40;. | fprint|
|00003940| 66 20 28 66 70 2c 20 22 | 25 64 20 25 64 5c 6e 22 |f (fp, "|%d %d\n"|
|00003950| 2c 20 28 69 6e 74 29 20 | 28 28 58 4d 41 58 20 2d |, (int) |((XMAX -|
|00003960| 20 58 4d 49 4e 29 20 2a | 20 53 43 41 4c 45 20 2b | XMIN) *| SCALE +|
|00003970| 30 2e 39 39 39 39 39 39 | 39 29 2c 20 28 69 6e 74 |0.999999|9), (int|
|00003980| 29 20 28 28 59 4d 41 58 | 20 2d 20 59 4d 49 4e 29 |) ((YMAX| - YMIN)|
|00003990| 20 2a 20 53 43 41 4c 45 | 20 2b 30 2e 39 39 39 39 | * SCALE| +0.9999|
|000039a0| 39 39 39 29 29 3b 0a 0a | 20 20 20 20 66 6f 72 20 |999));..| for |
|000039b0| 28 79 63 6f 20 3d 20 59 | 4d 41 58 20 2a 20 53 43 |(yco = Y|MAX * SC|
|000039c0| 41 4c 45 3b 20 79 63 6f | 20 3e 20 59 4d 49 4e 20 |ALE; yco| > YMIN |
|000039d0| 2a 20 53 43 41 4c 45 3b | 20 79 63 6f 2d 2d 29 0a |* SCALE;| yco--).|
|000039e0| 09 66 6f 72 20 28 78 63 | 6f 20 3d 20 58 4d 49 4e |.for (xc|o = XMIN|
|000039f0| 20 2a 20 53 43 41 4c 45 | 3b 20 78 63 6f 20 3c 20 | * SCALE|; xco < |
|00003a00| 58 4d 41 58 20 2a 20 53 | 43 41 4c 45 3b 20 78 63 |XMAX * S|CALE; xc|
|00003a10| 6f 2b 2b 29 20 7b 0a 09 | 20 20 20 20 4d 56 20 28 |o++) {..| MV (|
|00003a20| 78 63 6f 20 2f 20 53 43 | 41 4c 45 2c 20 79 63 6f |xco / SC|ALE, yco|
|00003a30| 20 2f 20 53 43 41 4c 45 | 2c 20 30 2e 30 2c 20 72 | / SCALE|, 0.0, r|
|00003a40| 72 2e 6f 72 67 29 3b 0a | 09 20 20 20 20 53 56 20 |r.org);.|. SV |
|00003a50| 28 72 72 2e 64 69 72 2c | 20 72 72 2e 6f 72 67 2c |(rr.dir,| rr.org,|
|00003a60| 20 76 70 29 3b 0a 09 20 | 20 20 20 66 70 72 69 6e | vp);.. | fprin|
|00003a70| 74 66 20 28 66 70 2c 20 | 22 25 63 22 2c 20 73 68 |tf (fp, |"%c", sh|
|00003a80| 61 64 65 20 28 26 72 72 | 29 29 3b 0a 09 7d 0a 7d |ade (&rr|));..}.}|
|00003a90| 0a 0a 62 6f 6f 62 6f 6f | 20 28 73 74 72 29 0a 63 |..booboo| (str).c|
|00003aa0| 68 61 72 20 20 20 2a 73 | 74 72 3b 20 7b 0a 20 20 |har *s|tr; {. |
|00003ab0| 20 20 70 72 69 6e 74 66 | 20 28 22 25 73 5c 6e 22 | printf| ("%s\n"|
|00003ac0| 2c 20 73 74 72 29 3b 0a | 20 20 20 20 65 78 69 74 |, str);.| exit|
|00003ad0| 20 28 2d 31 29 3b 0a 7d | 0a 40 2f 2f 45 2a 4f 2a | (-1);.}|.@//E*O*|
|00003ae0| 46 20 74 72 61 63 65 72 | 2e 63 2f 2f 0a 63 68 6d |F tracer|.c//.chm|
|00003af0| 6f 64 20 75 3d 72 77 2c | 67 3d 72 2c 6f 3d 72 20 |od u=rw,|g=r,o=r |
|00003b00| 74 72 61 63 65 72 2e 63 | 0a 20 0a 65 63 68 6f 20 |tracer.c|. .echo |
|00003b10| 78 20 2d 20 65 78 74 65 | 72 6e 2e 68 0a 73 65 64 |x - exte|rn.h.sed|
|00003b20| 20 27 73 2f 5e 40 2f 2f | 27 20 3e 20 22 65 78 74 | 's/^@//|' > "ext|
|00003b30| 65 72 6e 2e 68 22 20 3c | 3c 27 40 2f 2f 45 2a 4f |ern.h" <|<'@//E*O|
|00003b40| 2a 46 20 65 78 74 65 72 | 6e 2e 68 2f 2f 27 0a 65 |*F exter|n.h//'.e|
|00003b50| 78 74 65 72 6e 20 64 6f | 75 62 6c 65 20 73 75 7a |xtern do|uble suz|
|00003b60| 69 65 5b 33 30 30 5d 5b | 33 30 30 5d 2c 73 61 6d |ie[300][|300],sam|
|00003b70| 3b 0a 65 78 74 65 72 6e | 20 73 74 72 75 63 74 20 |;.extern| struct |
|00003b80| 62 61 6c 6c 20 2a 62 6c | 5b 5d 3b 0a 65 78 74 65 |ball *bl|[];.exte|
|00003b90| 72 6e 20 73 74 72 75 63 | 74 20 73 70 68 65 72 65 |rn struc|t sphere|
|00003ba0| 20 6c 73 3b 0a 65 78 74 | 65 72 6e 20 69 6e 74 20 | ls;.ext|ern int |
|00003bb0| 6c 65 76 65 6c 2c 6e 6f | 62 3b 0a 65 78 74 65 72 |level,no|b;.exter|
|00003bc0| 6e 20 69 6e 74 20 78 73 | 75 65 2c 79 73 75 65 3b |n int xs|ue,ysue;|
|00003bd0| 0a 40 2f 2f 45 2a 4f 2a | 46 20 65 78 74 65 72 6e |.@//E*O*|F extern|
|00003be0| 2e 68 2f 2f 0a 63 68 6d | 6f 64 20 75 3d 72 77 2c |.h//.chm|od u=rw,|
|00003bf0| 67 3d 72 2c 6f 3d 72 20 | 65 78 74 65 72 6e 2e 68 |g=r,o=r |extern.h|
|00003c00| 0a 20 0a 65 63 68 6f 20 | 78 20 2d 20 6d 61 63 72 |. .echo |x - macr|
|00003c10| 6f 73 2e 68 0a 73 65 64 | 20 27 73 2f 5e 40 2f 2f |os.h.sed| 's/^@//|
|00003c20| 27 20 3e 20 22 6d 61 63 | 72 6f 73 2e 68 22 20 3c |' > "mac|ros.h" <|
|00003c30| 3c 27 40 2f 2f 45 2a 4f | 2a 46 20 6d 61 63 72 6f |<'@//E*O|*F macro|
|00003c40| 73 2e 68 2f 2f 27 0a 2f | 2a 20 73 6f 6d 65 20 6f |s.h//'./|* some o|
|00003c50| 66 20 74 68 65 20 6d 6f | 73 74 20 69 6d 70 6f 72 |f the mo|st impor|
|00003c60| 74 61 6e 74 20 73 74 75 | 66 66 20 69 6e 20 74 68 |tant stu|ff in th|
|00003c70| 65 20 70 72 6f 67 72 61 | 6d 20 2a 2f 0a 23 64 65 |e progra|m */.#de|
|00003c80| 66 69 6e 65 20 44 4f 54 | 28 76 31 2c 76 32 29 20 |fine DOT|(v1,v2) |
|00003c90| 28 76 31 2e 78 2a 76 32 | 2e 78 2b 76 31 2e 79 2a |(v1.x*v2|.x+v1.y*|
|00003ca0| 76 32 2e 79 2b 76 31 2e | 7a 2a 76 32 2e 7a 29 0a |v2.y+v1.|z*v2.z).|
|00003cb0| 2f 2a 20 72 65 74 75 72 | 6e 73 20 64 6f 74 20 70 |/* retur|ns dot p|
|00003cc0| 72 6f 64 75 63 74 20 6f | 66 20 74 77 6f 20 76 65 |roduct o|f two ve|
|00003cd0| 63 74 6f 72 73 20 2a 2f | 0a 23 64 65 66 69 6e 65 |ctors */|.#define|
|00003ce0| 20 4c 4e 32 28 76 29 09 | 20 20 20 28 44 4f 54 28 | LN2(v).| (DOT(|
|00003cf0| 76 2c 76 29 29 0a 2f 2a | 20 72 65 74 75 72 6e 73 |v,v))./*| returns|
|00003d00| 20 74 68 65 20 73 71 75 | 61 72 65 20 6f 66 20 74 | the squ|are of t|
|00003d10| 68 65 20 6c 65 6e 67 74 | 68 20 6f 66 20 61 20 76 |he lengt|h of a v|
|00003d20| 65 63 74 6f 72 20 2a 2f | 0a 23 64 65 66 69 6e 65 |ector */|.#define|
|00003d30| 20 4c 45 4e 28 76 29 09 | 20 20 20 73 71 72 74 28 | LEN(v).| sqrt(|
|00003d40| 4c 4e 32 28 76 29 29 0a | 2f 2a 20 67 75 65 73 73 |LN2(v)).|/* guess|
|00003d50| 20 2a 2f 0a 23 64 65 66 | 69 6e 65 20 58 5a 4c 28 | */.#def|ine XZL(|
|00003d60| 76 29 09 20 20 20 73 71 | 72 74 28 76 2e 78 2a 76 |v). sq|rt(v.x*v|
|00003d70| 2e 78 2b 76 2e 7a 2a 76 | 2e 7a 29 0a 2f 2a 20 72 |.x+v.z*v|.z)./* r|
|00003d80| 65 74 75 72 6e 73 20 74 | 68 65 20 63 6f 6d 70 6f |eturns t|he compo|
|00003d90| 6e 65 6e 74 20 69 6e 20 | 74 68 65 20 78 7a 20 70 |nent in |the xz p|
|00003da0| 6c 61 6e 65 20 6f 66 20 | 61 20 76 65 63 74 6f 72 |lane of |a vector|
|00003db0| 20 2a 2f 0a 23 64 65 66 | 69 6e 65 20 53 43 4d 4c | */.#def|ine SCML|
|00003dc0| 54 28 73 63 2c 76 63 74 | 29 20 76 63 74 2e 78 2a |T(sc,vct|) vct.x*|
|00003dd0| 3d 20 73 63 3b 76 63 74 | 2e 79 2a 3d 20 73 63 3b |= sc;vct|.y*= sc;|
|00003de0| 76 63 74 2e 7a 2a 3d 20 | 73 63 3b 76 63 74 2e 6c |vct.z*= |sc;vct.l|
|00003df0| 2a 3d 20 73 63 3b 0a 2f | 2a 20 6d 75 6c 74 69 70 |*= sc;./|* multip|
|00003e00| 6c 69 65 73 20 61 20 76 | 65 74 6f 72 20 62 79 20 |lies a v|etor by |
|00003e10| 61 20 73 63 61 6c 61 72 | 20 2a 2f 0a 23 64 65 66 |a scalar| */.#def|
|00003e20| 69 6e 65 20 4d 56 28 61 | 2c 62 2c 63 2c 76 29 20 |ine MV(a|,b,c,v) |
|00003e30| 20 20 76 2e 78 3d 20 61 | 3b 76 2e 79 3d 20 62 3b | v.x= a|;v.y= b;|
|00003e40| 76 2e 7a 3d 20 63 3b 0a | 2f 2a 20 6d 61 6b 65 73 |v.z= c;.|/* makes|
|00003e50| 20 61 20 76 65 63 74 6f | 72 2e 20 77 6f 75 6c 64 | a vecto|r. would|
|00003e60| 6e 27 74 20 6e 65 65 64 | 20 74 68 69 73 20 77 69 |n't need| this wi|
|00003e70| 74 68 20 63 2b 2b 20 2a | 2f 0a 23 64 65 66 69 6e |th c++ *|/.#defin|
|00003e80| 65 20 53 56 28 74 2c 75 | 2c 76 29 20 20 74 2e 78 |e SV(t,u|,v) t.x|
|00003e90| 3d 75 2e 78 2d 76 2e 78 | 3b 74 2e 79 3d 75 2e 79 |=u.x-v.x|;t.y=u.y|
|00003ea0| 2d 76 2e 79 3b 74 2e 7a | 3d 75 2e 7a 2d 76 2e 7a |-v.y;t.z|=u.z-v.z|
|00003eb0| 3b 0a 2f 2a 73 75 62 74 | 72 61 63 74 20 76 65 63 |;./*subt|ract vec|
|00003ec0| 74 6f 72 20 74 3d 75 2d | 76 20 2a 2f 0a 23 64 65 |tor t=u-|v */.#de|
|00003ed0| 66 69 6e 65 20 41 56 28 | 74 2c 75 2c 76 29 20 20 |fine AV(|t,u,v) |
|00003ee0| 74 2e 78 3d 75 2e 78 2b | 76 2e 78 3b 74 2e 79 3d |t.x=u.x+|v.x;t.y=|
|00003ef0| 75 2e 79 2b 76 2e 79 3b | 74 2e 7a 3d 75 2e 7a 2b |u.y+v.y;|t.z=u.z+|
|00003f00| 76 2e 7a 3b 0a 2f 2a 20 | 61 64 64 20 76 65 63 74 |v.z;./* |add vect|
|00003f10| 6f 72 20 74 3d 75 2b 76 | 20 2a 2f 0a 23 64 65 66 |or t=u+v| */.#def|
|00003f20| 69 6e 65 20 4d 54 56 28 | 76 31 2c 6d 2c 76 32 29 |ine MTV(|v1,m,v2)|
|00003f30| 20 4d 56 28 44 4f 54 28 | 6d 2e 78 2c 76 32 29 2c | MV(DOT(|m.x,v2),|
|00003f40| 44 4f 54 28 6d 2e 79 2c | 76 32 29 2c 44 4f 54 28 |DOT(m.y,|v2),DOT(|
|00003f50| 6d 2e 7a 2c 76 32 29 2c | 76 31 29 0a 2f 2a 20 6d |m.z,v2),|v1)./* m|
|00003f60| 75 6c 74 69 70 6c 79 20 | 74 72 61 6e 73 70 6f 73 |ultiply |transpos|
|00003f70| 65 20 6d 61 74 72 69 78 | 20 62 79 20 76 65 63 74 |e matrix| by vect|
|00003f80| 6f 72 2e 20 76 31 3d 6d | 2a 76 32 20 2a 2f 0a 0a |or. v1=m|*v2 */..|
|00003f90| 23 64 65 66 69 6e 65 20 | 4c 45 56 45 4c 20 35 2f |#define |LEVEL 5/|
|00003fa0| 2a 20 6c 65 76 65 6c 73 | 20 6f 66 20 72 65 63 75 |* levels| of recu|
|00003fb0| 72 73 69 6f 6e 20 2a 2f | 0a 23 64 65 66 69 6e 65 |rsion */|.#define|
|00003fc0| 20 52 4c 45 56 20 20 33 | 2f 2a 64 6f 6e 27 74 20 | RLEV 3|/*don't |
|00003fd0| 77 61 6e 74 20 61 73 20 | 6d 61 6e 79 20 69 6e 73 |want as |many ins|
|00003fe0| 69 64 65 20 74 68 65 20 | 62 61 6c 6c 2c 20 74 61 |ide the |ball, ta|
|00003ff0| 6b 65 73 20 66 6f 72 65 | 76 65 72 20 61 73 20 69 |kes fore|ver as i|
|00004000| 74 20 69 73 2a 2f 0a 0a | 23 64 65 66 69 6e 65 20 |t is*/..|#define |
|00004010| 58 4d 49 4e 20 31 30 2e | 30 0a 23 64 65 66 69 6e |XMIN 10.|0.#defin|
|00004020| 65 20 58 4d 41 58 20 32 | 32 30 2e 30 0a 23 64 65 |e XMAX 2|20.0.#de|
|00004030| 66 69 6e 65 20 59 4d 49 | 4e 20 31 30 2e 30 0a 23 |fine YMI|N 10.0.#|
|00004040| 64 65 66 69 6e 65 20 59 | 4d 41 58 20 31 37 30 2e |define Y|MAX 170.|
|00004050| 30 0a 2f 2a 20 77 69 6e | 64 6f 77 20 73 69 7a 65 |0./* win|dow size|
|00004060| 2c 20 20 76 69 72 74 75 | 61 6c 20 75 6e 69 74 73 |, virtu|al units|
|00004070| 20 2a 2f 0a 23 64 65 66 | 69 6e 65 20 53 43 41 4c | */.#def|ine SCAL|
|00004080| 45 20 20 32 2e 30 0a 2f | 2a 20 6d 61 67 69 6e 69 |E 2.0./|* magini|
|00004090| 66 69 63 61 74 69 6f 6e | 20 66 61 63 74 6f 72 20 |fication| factor |
|000040a0| 2a 2f 0a 40 2f 2f 45 2a | 4f 2a 46 20 6d 61 63 72 |*/.@//E*|O*F macr|
|000040b0| 6f 73 2e 68 2f 2f 0a 63 | 68 6d 6f 64 20 75 3d 72 |os.h//.c|hmod u=r|
|000040c0| 77 2c 67 3d 72 2c 6f 3d | 72 20 6d 61 63 72 6f 73 |w,g=r,o=|r macros|
|000040d0| 2e 68 0a 20 0a 65 63 68 | 6f 20 78 20 2d 20 72 74 |.h. .ech|o x - rt|
|000040e0| 64 2e 68 0a 73 65 64 20 | 27 73 2f 5e 40 2f 2f 27 |d.h.sed |'s/^@//'|
|000040f0| 20 3e 20 22 72 74 64 2e | 68 22 20 3c 3c 27 40 2f | > "rtd.|h" <<'@/|
|00004100| 2f 45 2a 4f 2a 46 20 72 | 74 64 2e 68 2f 2f 27 0a |/E*O*F r|td.h//'.|
|00004110| 73 74 72 75 63 74 20 63 | 6f 6c 6f 72 20 7b 0a 69 |struct c|olor {.i|
|00004120| 6e 74 20 72 3b 69 6e 74 | 20 67 3b 69 6e 74 20 62 |nt r;int| g;int b|
|00004130| 3b 7d 3b 0a 0a 73 74 72 | 75 63 74 20 76 65 63 74 |;};..str|uct vect|
|00004140| 6f 72 20 7b 0a 64 6f 75 | 62 6c 65 20 78 3b 0a 64 |or {.dou|ble x;.d|
|00004150| 6f 75 62 6c 65 20 79 3b | 0a 64 6f 75 62 6c 65 20 |ouble y;|.double |
|00004160| 7a 3b 0a 64 6f 75 62 6c | 65 20 6c 3b 0a 64 6f 75 |z;.doubl|e l;.dou|
|00004170| 62 6c 65 20 78 7a 6c 3b | 7d 20 3b 0a 0a 73 74 72 |ble xzl;|} ;..str|
|00004180| 75 63 74 20 72 61 79 20 | 7b 0a 73 74 72 75 63 74 |uct ray |{.struct|
|00004190| 20 76 65 63 74 6f 72 20 | 6f 72 67 3b 0a 73 74 72 | vector |org;.str|
|000041a0| 75 63 74 20 76 65 63 74 | 6f 72 20 64 69 72 3b 7d |uct vect|or dir;}|
|000041b0| 20 3b 0a 0a 73 74 72 75 | 63 74 20 73 70 68 65 72 | ;..stru|ct spher|
|000041c0| 65 20 7b 0a 73 74 72 75 | 63 74 20 76 65 63 74 6f |e {.stru|ct vecto|
|000041d0| 72 20 63 65 6e 74 3b 0a | 64 6f 75 62 6c 65 20 72 |r cent;.|double r|
|000041e0| 61 64 3b 7d 20 3b 0a 0a | 73 74 72 75 63 74 20 62 |ad;} ;..|struct b|
|000041f0| 61 6c 6c 20 7b 0a 73 74 | 72 75 63 74 20 73 70 68 |all {.st|ruct sph|
|00004200| 65 72 65 20 73 3b 0a 64 | 6f 75 62 6c 65 20 69 6f |ere s;.d|ouble io|
|00004210| 72 3b 0a 64 6f 75 62 6c | 65 20 72 66 72 3b 0a 64 |r;.doubl|e rfr;.d|
|00004220| 6f 75 62 6c 65 20 72 66 | 6c 3b 0a 64 6f 75 62 6c |ouble rf|l;.doubl|
|00004230| 65 20 64 69 66 3b 0a 64 | 6f 75 62 6c 65 20 61 6d |e dif;.d|ouble am|
|00004240| 62 3b 0a 7d 3b 0a 0a 73 | 74 72 75 63 74 20 6d 61 |b;.};..s|truct ma|
|00004250| 74 20 7b 0a 73 74 72 75 | 63 74 20 76 65 63 74 6f |t {.stru|ct vecto|
|00004260| 72 20 78 3b 20 20 2f 2a | 20 66 69 72 73 74 20 21 |r x; /*| first !|
|00004270| 72 6f 77 21 20 2a 2f 0a | 73 74 72 75 63 74 20 76 |row! */.|struct v|
|00004280| 65 63 74 6f 72 20 79 3b | 20 20 2f 2a 73 65 63 6f |ector y;| /*seco|
|00004290| 6e 64 20 21 72 6f 77 21 | 20 2a 2f 0a 73 74 72 75 |nd !row!| */.stru|
|000042a0| 63 74 20 76 65 63 74 6f | 72 20 7a 3b 7d 3b 20 2f |ct vecto|r z;}; /|
|000042b0| 2a 20 74 68 69 72 64 20 | 21 72 6f 77 21 20 2a 2f |* third |!row! */|
|000042c0| 0a 0a 40 2f 2f 45 2a 4f | 2a 46 20 72 74 64 2e 68 |..@//E*O|*F rtd.h|
|000042d0| 2f 2f 0a 63 68 6d 6f 64 | 20 75 3d 72 77 2c 67 3d |//.chmod| u=rw,g=|
|000042e0| 72 2c 6f 3d 72 20 72 74 | 64 2e 68 0a 20 0a 65 78 |r,o=r rt|d.h. .ex|
|000042f0| 69 74 20 30 0a 0a 0a | |it 0... | |
+--------+-------------------------+-------------------------+--------+--------+