Home My Page Projects Code Snippets Project Openings diderot
Summary Activity Tracker Tasks SCM

SCM Repository

[diderot] Annotation of /trunk/src/lib/diderot.c
ViewVC logotype

Annotation of /trunk/src/lib/diderot.c

Parent Directory Parent Directory | Revision Log Revision Log


Revision 439 - (view) (download) (as text)

1 : jhr 439 /*! \file diderot.c
2 :     *
3 :     * \author John Reppy
4 :     */
5 :    
6 :     /*
7 :     * COPYRIGHT (c) 2010 The Diderot Project (http://diderot-language.cs.uchicago.edu)
8 :     * All rights reserved.
9 :     */
10 :    
11 :     #include "diderot.h"
12 :     #include <teem/nrrd.h>
13 :    
14 :     /* load image data from Nrrd files */
15 :     Status_t Diderot_LoadImage1D (Diderot_string_t name, Diderot_image1D_t *img);
16 :     Status_t Diderot_LoadImage2D (Diderot_string_t name, Diderot_image2D_t *img);
17 :     Status_t Diderot_LoadImage3D (Diderot_string_t name, Diderot_image3D_t *img)
18 :     {
19 :     Nrrd *nin = loadNrrdFile (name);
20 :    
21 :     img->dim = 3;
22 :     img->size[0] = nin->axis[0].size;
23 :     img->size[1] = nin->axis[1].size;
24 :     img->size[2] = nin->axis[2].size;
25 :     img->data = nin->data;
26 :    
27 :     loadTransformMatrix (nin, transformMatrix);
28 :     InvertM (transformMatrix, inverseMatrix);
29 :    
30 :     }
31 :    
32 :     /* functions to get input-parameter values */
33 :     extern Status_t Diderot_InputString (const char *, const char **, bool);
34 :     extern Status_t Diderot_InputReal (const char *, Diderot_real_t *, bool);
35 :     extern Status_t Diderot_InputVec3 (const char *, Diderot_vec3_t *v);
36 :    
37 :     /* Transformation matrix operations */
38 :    
39 :     STATIC_INLINE Diderot_real_t DetM3x3 (
40 :     Diderot_real_t a, Diderot_real_t b, Diderot_real_t c,
41 :     Diderot_real_t d, Diderot_real_t e, Diderot_real_t f,
42 :     Diderot_real_t g, Diderot_real_t h, Diderot_real_t i)
43 :     {
44 :     return ( (a)*(e)*(i)
45 :     + (d)*(h)*(c)
46 :     + (g)*(b)*(f)
47 :     - (g)*(e)*(c)
48 :     - (d)*(b)*(i)
49 :     - (a)*(h)*(f));
50 :     }
51 :    
52 :     Diderot_real_t DetM4x4 (Matrix4x4_t m)
53 :     {
54 :     return (m[ 0] * DetM3x3(m[ 5], m[ 6], m[ 7],
55 :     m[ 9], m[10], m[11],
56 :     m[13], m[14], m[15])
57 :     - m[ 1] * DetM3x3(m[ 4], m[ 6], m[ 7],
58 :     m[ 8], m[10], m[11],
59 :     m[12], m[14], m[15])
60 :     + m[ 2] * DetM3x3(m[ 4], m[ 5], m[ 7],
61 :     m[ 8], m[ 9], m[11],
62 :     m[12], m[13], m[15])
63 :     - m[ 3] * DetM3x3(m[ 4], m[ 5], m[ 6],
64 :     m[ 8], m[ 9], m[10],
65 :     m[12], m[13], m[14]));
66 :    
67 :     }
68 :     void InvertM4x4 (Matrix4x4_t i, Matrix4x4_t m)
69 :     {
70 :     Diderot_real_t scale = 1.0 / DetM4x4(m);
71 :    
72 :     i[0] = DetM3x3(m[5],m[ 6],m[ 7],
73 :     m[ 9],m[10],m[11],
74 :     m[13],m[14],m[15]) * scale;
75 :    
76 :     i[ 1] = -DetM3x3(m[ 1],m[ 2],m[ 3],
77 :     m[ 9],m[10],m[11],
78 :     m[13],m[14],m[15]) * scale;
79 :    
80 :     i[ 2] = DetM3x3(m[ 1],m[ 2],m[ 3],
81 :     m[ 5],m[ 6],m[ 7],
82 :     m[13],m[14],m[15]) * scale;
83 :    
84 :     i[ 3] = -DetM3x3(m[ 1],m[ 2],m[ 3],
85 :     m[ 5],m[ 6],m[ 7],
86 :     m[ 9],m[10],m[11]) * scale;
87 :    
88 :     i[ 4] = -DetM3x3(m[ 4],m[ 6],m[ 7],
89 :     m[ 8],m[10],m[11],
90 :     m[12],m[14],m[15]) * scale;
91 :    
92 :     i[ 5] = DetM3x3(m[ 0],m[ 2],m[ 3],
93 :     m[ 8],m[10],m[11],
94 :     m[12],m[14],m[15]) * scale;
95 :    
96 :     i[ 6] = -DetM3x3(m[ 0],m[ 2],m[ 3],
97 :     m[ 4],m[ 6],m[ 7],
98 :     m[12],m[14],m[15]) * scale;
99 :    
100 :     i[ 7] = DetM3x3(m[ 0],m[ 2],m[ 3],
101 :     m[ 4],m[ 6],m[ 7],
102 :     m[ 8],m[10],m[11]) * scale;
103 :    
104 :     i[ 8] = DetM3x3(m[ 4],m[ 5],m[ 7],
105 :     m[ 8],m[ 9],m[11],
106 :     m[12],m[13],m[15]) * scale;
107 :    
108 :     i[ 9] = -DetM3x3(m[ 0],m[ 1],m[ 3],
109 :     m[ 8],m[ 9],m[11],
110 :     m[12],m[13],m[15]) * scale;
111 :    
112 :     i[10] = DetM3x3(m[ 0],m[ 1],m[ 3],
113 :     m[ 4],m[ 5],m[ 7],
114 :     m[12],m[13],m[15]) * scale;
115 :    
116 :     i[11] = -DetM3x3(m[ 0],m[ 1],m[ 3],
117 :     m[ 4],m[ 5],m[ 7],
118 :     m[ 8],m[ 9],m[11]) * scale;
119 :    
120 :     i[12] = -DetM3x3(m[ 4],m[ 5],m[ 6],
121 :     m[ 8],m[ 9],m[10],
122 :     m[12],m[13],m[14]) * scale;
123 :    
124 :     i[13] = DetM3x3(m[ 0],m[ 1],m[ 2],
125 :     m[ 8],m[ 9],m[10],
126 :     m[12],m[13],m[14]) * scale;
127 :    
128 :     i[14] = -DetM3x3(m[ 0],m[ 1],m[ 2],
129 :     m[ 4],m[ 5],m[ 6],
130 :     m[12],m[13],m[14]) * scale;
131 :    
132 :     i[15] = DetM3x3(m[ 0],m[ 1],m[ 2],
133 :     m[ 4],m[ 5],m[ 6],
134 :     m[ 8],m[ 9],m[10]) * scale;
135 :    
136 :     }

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