SCM Repository
Annotation of /trunk/src/lib/diderot.c
Parent Directory
|
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 |