Home My Page Projects Code Snippets Project Openings SML/NJ
Summary Activity Forums Tracker Lists Tasks Docs Surveys News SCM Files

SCM Repository

[smlnj] Annotation of /sml/trunk/benchmarks/programs/b-hut/vector3.sml
ViewVC logotype

Annotation of /sml/trunk/benchmarks/programs/b-hut/vector3.sml

Parent Directory Parent Directory | Revision Log Revision Log


Revision 193 - (view) (download)

1 : monnier 193 (* vector3.sml
2 :     *
3 :     * COPYRIGHT (c) 1993, AT&T Bell Laboratories.
4 :     *
5 :     * 3 dimensional vector arithmetic.
6 :     *)
7 :    
8 :     structure Vector3 : VECTOR =
9 :     struct
10 :    
11 :     type 'a vec = {x : 'a, y : 'a, z : 'a}
12 :     type realvec = real vec
13 :    
14 :     val dim = 3
15 :    
16 :     fun tabulate f = {x = f 0, y = f 1, z = f 2}
17 :    
18 :     val zerov = {x = 0.0, y = 0.0, z = 0.0}
19 :     fun equal({x, y, z}, {x=x1, y=y1, z=z1}) =
20 :     Real.==(x, x1) andalso Real.==(y, y1) andalso Real.==(z, z1)
21 :    
22 :     fun addv ({x=x1, y=y1, z=z1} : realvec, {x=x2, y=y2, z=z2}) =
23 :     {x=x1+x2, y=y1+y2, z=z1+z2}
24 :    
25 :     fun subv ({x=x1, y=y1, z=z1} : realvec, {x=x2, y=y2, z=z2}) =
26 :     {x=x1-x2, y=y1-y2, z=z1-z2}
27 :    
28 :     fun dotvp ({x=x1, y=y1, z=z1} : realvec, {x=x2, y=y2, z=z2}) =
29 :     x1*x2 + y1*y2 + z1*z2
30 :    
31 :     fun crossvp ({x=x1, y=y1, z=z1} : realvec, {x=x2, y=y2, z=z2}) =
32 :     {x = y1*z2 - z1*y2, y = x1*z2 - z1*x2, z = x1*y2 - y1*x2}
33 :    
34 :     fun addvs ({x, y, z} : realvec, s) = {x=x+s, y=y+s, z=z+s}
35 :    
36 :     fun mulvs ({x, y, z} : realvec, s) = {x=x*s, y=y*s, z=z*s}
37 :    
38 :     fun divvs ({x, y, z} : realvec, s) = {x=x/s, y=y/s, z=z/s}
39 :    
40 :     fun mapv f {x, y, z} = {x = f x, y = f y, z = f z}
41 :    
42 :     fun map3v f ({x=x1, y=y1, z=z1}, {x=x2, y=y2, z=z2}, {x=x3, y=y3, z=z3}) =
43 :     {x = f(x1, x2, x3), y = f(y1, y2, y3), z = f(z1, z2, z3)}
44 :    
45 :     fun foldv f {x, y, z} init = f(z, f(y, f(x, init)))
46 :    
47 :     fun format {lp, rp, sep, cvt} {x, y, z} = String.concat[
48 :     lp, cvt x, sep, cvt y, sep, cvt z, rp
49 :     ]
50 :    
51 :     fun explode {x, y, z} = [x, y, z]
52 :    
53 :     fun implode [x, y, z] = {x=x, y=y, z=z}
54 :     | implode _ = raise Fail "implode: bad dimension"
55 :    
56 :     type matrix = {
57 :     m00 : real, m01 : real, m02 : real,
58 :     m10 : real, m11 : real, m12 : real,
59 :     m20 : real, m21 : real, m22 : real
60 :     }
61 :    
62 :     val zerom = {
63 :     m00 = 0.0, m01 = 0.0, m02 = 0.0,
64 :     m10 = 0.0, m11 = 0.0, m12 = 0.0,
65 :     m20 = 0.0, m21 = 0.0, m22 = 0.0
66 :     }
67 :    
68 :     fun addm (a : matrix, b : matrix) = {
69 :     m00=(#m00 a + #m00 b), m01=(#m01 a + #m01 b), m02=(#m02 a + #m02 b),
70 :     m10=(#m10 a + #m10 b), m11=(#m11 a + #m11 b), m12=(#m12 a + #m12 b),
71 :     m20=(#m20 a + #m20 b), m21=(#m21 a + #m21 b), m22=(#m22 a + #m22 b)
72 :     }
73 :    
74 :     fun outvp ({x=a0, y=a1, z=a2} : realvec, {x=b0, y=b1, z=b2}) = {
75 :     m00=(a0*b0), m01=(a0*b1), m02=(a0*b2),
76 :     m10=(a1*b0), m11=(a1*b1), m12=(a1*b2),
77 :     m20=(a2*b0), m21=(a2*b1), m22=(a2*b2)
78 :     }
79 :    
80 :     end (* VectMath *)
81 :    

root@smlnj-gforge.cs.uchicago.edu
ViewVC Help
Powered by ViewVC 1.0.0