Main Page
Related Pages
Modules
Data Structures
Files
File List
Globals
mia
3d
critical_point.hh
Go to the documentation of this file.
1
/* -*- mia-c++ -*-
2
*
3
* This file is part of MIA - a toolbox for medical image analysis
4
* Copyright (c) Leipzig, Madrid 1999-2013 Gert Wollny
5
*
6
* MIA is free software; you can redistribute it and/or modify
7
* it under the terms of the GNU General Public License as published by
8
* the Free Software Foundation; either version 3 of the License, or
9
* (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with MIA; if not, see <http://www.gnu.org/licenses/>.
18
*
19
*/
20
21
#ifndef __mia_3d_criticalpoint_h
22
#define __mia_3d_criticalpoint_h
23
24
#include <list>
25
26
#include <
mia/3d/matrix.hh
>
27
28
NS_MIA_BEGIN
29
44
class
C3DCriticalPoint
{
45
public
:
46
48
typedef
std::vector< C3DCriticalPoint >
List
;
49
55
C3DCriticalPoint
();
56
64
C3DCriticalPoint
(
const
C3DFVector
& x0_);
72
C3DCriticalPoint
(
float
x,
float
y,
float
z);
73
78
C3DCriticalPoint
(
const
C3DCriticalPoint
& org);
79
84
C3DCriticalPoint
&
operator =
(
const
C3DCriticalPoint
& org);
85
87
const
C3DFVector
get_point
()
const
;
88
90
const
C3DFMatrix
get_a
()
const
;
91
93
float
get_gamma
()
const
;
94
96
C3DFVector
&
get_point
();
97
99
C3DFMatrix
&
get_a
();
100
105
void
set_gamma
(
float
gamma_);
106
112
C3DFVector
at
(
const
C3DFVector
& x)
const
;
113
114
C3DFVector
at_alt
(
const
C3DFVector
& x)
const
;
115
119
bool
operator ==
(
const
C3DCriticalPoint
& cp)
const
;
120
#ifdef UGLY_HACK
121
bool
operator <
(
const
C3DCriticalPoint
& cp)
const
;
122
#endif
123
124
125
private
:
126
float
gamma;
127
C3DFVector
x0;
128
C3DFMatrix
A;
129
};
130
132
typedef
C3DCriticalPoint::List
C3DCriticalPointList
;
133
134
135
typedef
std::complex<float>
fcomplex
;
136
typedef
T3DVector<fcomplex>
C3DCVector
;
137
145
class
C3DCriticalPointEigen
{
147
C3DFVector
location;
148
149
151
C3DFMatrix
portrait;
152
154
float
eval1;
156
float
eval2;
158
float
eval3;
159
161
C3DFVector
evec1;
162
164
C3DFVector
evec2;
165
167
C3DFVector
evec3;
168
169
public
:
171
enum
EVType
{
ev_zero
,
172
ev_real
,
173
ev_real_two_equal
,
174
ev_real_three_equal
,
175
ev_complex
};
180
C3DCriticalPointEigen
(
C3DCriticalPoint
cp);
181
186
C3DCriticalPointEigen
(
const
C3DFVector
& l,
const
C3DFMatrix
& m);
187
199
C3DCriticalPointEigen
(
const
C3DFVector
& location_,
200
const
C3DFMatrix
& portrait_,
201
float
eval1,
float
eval2,
float
eval3,
202
const
C3DFVector
& evec1,
const
C3DFVector
& evec2,
const
C3DFVector
& evec3,
203
EVType
type);
204
205
207
EVType
get_type
()
const
;
208
210
float
get_eval1
()
const
;
214
float
get_eval2
()
const
;
218
float
get_eval3
()
const
;
219
223
float
get_real_eval2
()
const
;
227
float
get_real_eval3
()
const
;
228
232
fcomplex
get_complex_eval2
()
const
;
233
237
fcomplex
get_complex_eval3
()
const
;
238
241
const
C3DFMatrix
get_portrait
()
const
;
242
245
const
C3DFVector
get_location
()
const
;
246
249
const
C3DFVector
get_evect1
()
const
;
250
254
const
C3DFVector
get_evect2
()
const
;
258
const
C3DFVector
get_evect3
()
const
;
259
260
261
const
C3DFVector
get_real_evect2
()
const
;
262
const
C3DFVector
get_real_evect3
()
const
;
263
const
C3DCVector
get_complex_evect2
()
const
;
264
const
C3DCVector
get_complex_evect3
()
const
;
265
266
267
private
:
268
EVType
type;
269
bool
estimate();
270
};
271
272
typedef
std::vector< C3DCriticalPointEigen >
C3DCriticalPointEigenList
;
273
274
inline
C3DCriticalPointEigen::EVType
C3DCriticalPointEigen::get_type
()
const
275
{
276
return
type;
277
}
278
inline
float
C3DCriticalPointEigen::get_eval1
()
const
279
{
280
return
eval1;
281
}
282
inline
float
C3DCriticalPointEigen::get_eval2
()
const
283
{
284
return
eval2;
285
}
286
inline
float
C3DCriticalPointEigen::get_eval3
()
const
287
{
288
return
eval3;
289
}
290
291
inline
float
C3DCriticalPointEigen::get_real_eval2
()
const
292
{
293
assert(type !=
ev_complex
);
294
return
eval2;
295
}
296
inline
float
C3DCriticalPointEigen::get_real_eval3
()
const
297
{
298
assert(type !=
ev_complex
);
299
return
eval3;
300
}
301
inline
fcomplex
C3DCriticalPointEigen::get_complex_eval2
()
const
302
{
303
assert(type ==
ev_complex
);
304
return
fcomplex
(eval2,eval3);
305
}
306
inline
fcomplex
C3DCriticalPointEigen::get_complex_eval3
()
const
307
{
308
assert(type ==
ev_complex
);
309
return
fcomplex
(eval2,-eval3);
310
}
311
312
inline
const
C3DFVector
C3DCriticalPointEigen::get_evect1
()
const
313
{
314
return
evec1;
315
}
316
inline
const
C3DFVector
C3DCriticalPointEigen::get_evect2
()
const
317
{
318
return
evec2;
319
}
320
inline
const
C3DFVector
C3DCriticalPointEigen::get_evect3
()
const
321
{
322
return
evec3;
323
}
324
inline
const
C3DFVector
C3DCriticalPointEigen::get_real_evect2
()
const
325
{
326
assert(type !=
ev_complex
);
327
return
evec2;
328
}
329
inline
const
C3DFVector
C3DCriticalPointEigen::get_real_evect3
()
const
330
{
331
assert(type !=
ev_complex
);
332
return
evec3;
333
}
334
inline
const
C3DCVector
C3DCriticalPointEigen::get_complex_evect2
()
const
335
{
336
assert(type ==
ev_complex
);
337
return
C3DCVector
(
fcomplex
(evec2.
x
,evec3.
x
),
338
fcomplex
(evec2.
y
,evec3.
y
),
339
fcomplex
(evec2.
z
,evec3.
z
));
340
}
341
inline
const
C3DCVector
C3DCriticalPointEigen::get_complex_evect3
()
const
342
{
343
assert(type ==
ev_complex
);
344
return
C3DCVector
(
fcomplex
(evec2.
x
,-evec3.
x
),
345
fcomplex
(evec2.
y
,-evec3.
y
),
346
fcomplex
(evec2.
z
,-evec3.
z
));
347
}
348
349
inline
const
C3DFVector
C3DCriticalPointEigen::get_location
()
const
350
{
351
return
location;
352
}
353
354
355
inline
const
C3DFMatrix
C3DCriticalPointEigen::get_portrait
()
const
356
{
357
return
portrait;
358
}
359
360
361
//template implementation
362
363
364
inline
const
C3DFVector
C3DCriticalPoint::get_point
()
const
365
{
366
return
x0;
367
}
368
369
inline
const
C3DFMatrix
C3DCriticalPoint::get_a
()
const
370
{
371
return
A;
372
}
373
374
inline
C3DFVector
&
C3DCriticalPoint::get_point
()
375
{
376
return
x0;
377
}
378
379
inline
C3DFMatrix
&
C3DCriticalPoint::get_a
()
380
{
381
return
A;
382
}
383
384
inline
float
C3DCriticalPoint::get_gamma
()
const
385
{
386
return
gamma;
387
}
388
389
inline
void
C3DCriticalPoint::set_gamma
(
float
_gamma)
390
{
391
gamma = _gamma;
392
}
393
394
395
inline
bool
C3DCriticalPoint::operator ==
(
const
C3DCriticalPoint
& cp)
const
396
{
397
return
gamma==cp.gamma && A == cp.A && x0 == cp.x0;
398
}
399
400
#ifdef UGLY_HACK
401
inline
bool
C3DCriticalPoint::operator <
(
const
C3DCriticalPoint
& cp)
const
402
{
403
// we shouldn't need this ...
404
return
x0 < cp.x0;
405
}
406
#endif
407
408
#endif
409
410
NS_MIA_END
Generated on Tue Oct 15 2013 13:56:37 by
1.8.4