trans_seq.h
Go to the documentation of this file.
1 #ifndef TRANS_SEQH
2 #define TRANS_SEQH
3 
4 #include "htransform.h"
5 #include "boolean.h"
6 
7 #include <stdio.h>
8 
24 #define TV (RZ+1)
25 
31 #define PA (TV+1)
32 
38 #define CT_TRANS (PA+1)
39 
44 #define dRX (CT_TRANS+1)
45 
50 #define dRY (dRX+1)
51 
56 #define dRZ (dRY+1)
57 
63 #define dPA_U (dRZ+1)
64 
70 #define dPA_V (dPA_U+1)
71 
76 #define ddRX (dPA_V+1)
77 
82 #define ddRY (ddRX+1)
83 
88 #define ddRZ (ddRY+1)
89 
95 #define ddPA_UU (ddRZ+1)
96 
102 #define ddPA_UV (ddPA_UU+1)
103 
109 #define ddPA_VV (ddPA_UV+1)
110 
117 #define INIT_NUM_TERMS_TS 10
118 
126 #define IS_PATCH_TRANS(t) ((t==PA)||(t==dPA_U)||(t==dPA_V)||(t==ddPA_UU)||(t==ddPA_UV)||(t==ddPA_VV))
127 
136 typedef struct {
137  unsigned int t;
138  unsigned int u;
139  unsigned int v;
141  int s;
145  double *vect;
146  double **p;
148 } TTrans;
149 
158 void InitCtTrans(THTransform *ct,TTrans *t);
159 
171 void InitVarTrans(unsigned int tp,int s,unsigned int v,TTrans *t);
172 
184 void InitTVTrans(int s,unsigned int v,double *vect,TTrans *t);
185 
209 void InitPatchTrans(unsigned int tp,int s,unsigned int u,unsigned int v,
210  double **p,TTrans *t);
211 
217 void CopyTrans(TTrans *t_dst,TTrans *t_src);
218 
227 void TransInvert(TTrans *ti,TTrans *t);
228 
239 boolean TransHasVar(unsigned int v,TTrans *t);
240 
256 void EvaluateVectorsPATrans(double u,double v,double *x,double *y,double *h,TTrans *t);
257 
273 void EvaluatePATrans(double u,double v,THTransform *a,TTrans *t);
274 
282 void DeleteTrans(TTrans *t);
283 
296 typedef struct {
297  unsigned int m;
298  unsigned int n;
299  TTrans **t;
300 } TTransSeq;
301 
309 void InitTransSeq(TTransSeq *ts);
310 
319 void CopyTransSeq(TTransSeq *ts_dst,TTransSeq *ts_src);
320 
329 void ResetTransSeq(TTransSeq *ts);
330 
338 boolean IsEmptyTransSeq(TTransSeq *ts);
339 
354 boolean HasCtRotTransSeq(TTransSeq *ts);
355 
365 unsigned int TransSeqSize(TTransSeq *ts);
366 
378 TTrans *GetElementFromTransSeq(unsigned int i,TTransSeq *ts);
379 
388 void AddTrans2TransSeq(TTrans *t,TTransSeq *ts);
389 
402 
413 void AddVarTrans2TransSeq(unsigned int t,int s,unsigned int v,TTransSeq *ts);
414 
425 void AddDispTrans2TransSeq(int s,unsigned int v,double *vect,TTransSeq *ts);
426 
439 void AddPatchTrans2TransSeq(unsigned int t,int s,unsigned int u,unsigned int v,
440  double **p,TTransSeq *ts);
441 
451 boolean VarIncludedinTransSeq(unsigned int v,TTransSeq *ts);
452 
463 void UpdateUsedDOF(unsigned int *dof,TTransSeq *ts);
464 
478 void ShiftVariablesInTransSeq(unsigned int nv,TTransSeq *ts);
479 
494 void SimplifyTransSeq(TTransSeq *ts);
495 
510 void DeriveTransSeq(unsigned int v,unsigned int *n,TTransSeq ***tsd,TTransSeq *ts);
511 
521 void EvaluateTransSeq(double *v,THTransform *r,TTransSeq *ts);
522 
533 void PrintTransSeq(FILE *f,char **varNames,TTransSeq *ts);
534 
542 void DeleteTransSeq(TTransSeq *ts);
543 
544 #endif
Definition of the boolean type.
boolean TransHasVar(unsigned int v, TTrans *t)
Identifies if a variable is involved in a given transform.
Definition: trans_seq.c:145
void CopyTransSeq(TTransSeq *ts_dst, TTransSeq *ts_src)
Constructor.
Definition: trans_seq.c:220
void EvaluatePATrans(double u, double v, THTransform *a, TTrans *t)
Evaluates a PA transform.
Definition: trans_seq.c:169
void InitPatchTrans(unsigned int tp, int s, unsigned int u, unsigned int v, double **p, TTrans *t)
Initializes a parametrized-patch transform.
Definition: trans_seq.c:58
void AddPatchTrans2TransSeq(unsigned int t, int s, unsigned int u, unsigned int v, double **p, TTransSeq *ts)
Adds a Parametrized-Patch transform to a transform sequence.
Definition: trans_seq.c:375
void UpdateUsedDOF(unsigned int *dof, TTransSeq *ts)
Determines the dof used in a transform sequence.
Definition: trans_seq.c:405
A homgeneous transform in R^3.
void ShiftVariablesInTransSeq(unsigned int nv, TTransSeq *ts)
Adjust variable indices after removing a variable.
Definition: trans_seq.c:465
unsigned int v
Definition: trans_seq.h:139
void EvaluateTransSeq(double *v, THTransform *r, TTransSeq *ts)
Evaluates the transform sequence.
Definition: trans_seq.c:623
void InitTransSeq(TTransSeq *ts)
Constructor.
Definition: trans_seq.c:213
boolean VarIncludedinTransSeq(unsigned int v, TTransSeq *ts)
Determines if the sequence includes a given variable.
Definition: trans_seq.c:390
void EvaluateVectorsPATrans(double u, double v, double *x, double *y, double *h, TTrans *t)
Computes the vectors defining a PA transform.
Definition: trans_seq.c:150
void PrintTransSeq(FILE *f, char **varNames, TTransSeq *ts)
Prints a transform sequence to a file.
Definition: trans_seq.c:909
void AddTrans2TransSeq(TTrans *t, TTransSeq *ts)
Adds a transform to a transform sequence.
Definition: trans_seq.c:277
unsigned int TransSeqSize(TTransSeq *ts)
Number of elements in the transform sequence.
Definition: trans_seq.c:264
void DeleteTrans(TTrans *t)
Destructor.
Definition: trans_seq.c:184
void DeleteTransSeq(TTransSeq *ts)
Destructor.
Definition: trans_seq.c:1109
void InitCtTrans(THTransform *ct, TTrans *t)
Initializes a constant transform.
Definition: trans_seq.c:21
boolean IsEmptyTransSeq(TTransSeq *ts)
Identify empty transform sequences.
Definition: trans_seq.c:247
A step in a transform sequence.
Definition: trans_seq.h:136
THTransform * ct
Definition: trans_seq.h:143
void ResetTransSeq(TTransSeq *ts)
Semi-destructor.
Definition: trans_seq.c:235
void InitVarTrans(unsigned int tp, int s, unsigned int v, TTrans *t)
Initializes a variable transform.
Definition: trans_seq.c:33
boolean HasCtRotTransSeq(TTransSeq *ts)
Checks if the tranform sequence includes contant rotations.
Definition: trans_seq.c:252
double * vect
Definition: trans_seq.h:145
unsigned int n
Definition: trans_seq.h:298
TTrans * GetElementFromTransSeq(unsigned int i, TTransSeq *ts)
Returns an element from a transform sequence.
Definition: trans_seq.c:269
Definition of the THTransform type and the associated functions.
A sequence of transforms.
Definition: trans_seq.h:296
TTrans ** t
Definition: trans_seq.h:299
void AddVarTrans2TransSeq(unsigned int t, int s, unsigned int v, TTransSeq *ts)
Adds a variable transform to the sequence.
Definition: trans_seq.c:338
void CopyTrans(TTrans *t_dst, TTrans *t_src)
Constructor.
Definition: trans_seq.c:99
void InitTVTrans(int s, unsigned int v, double *vect, TTrans *t)
Initializes a TV transform.
Definition: trans_seq.c:46
unsigned int t
Definition: trans_seq.h:137
void AddDispTrans2TransSeq(int s, unsigned int v, double *vect, TTransSeq *ts)
Adds a displacement transform to the sequence.
Definition: trans_seq.c:361
int s
Definition: trans_seq.h:141
void DeriveTransSeq(unsigned int v, unsigned int *n, TTransSeq ***tsd, TTransSeq *ts)
Derive a sequence of transforms.
Definition: trans_seq.c:494
void TransInvert(TTrans *ti, TTrans *t)
Invert a transform.
Definition: trans_seq.c:136
void AddCtTrans2TransSeq(THTransform *t, TTransSeq *ts)
Adds a constant transform to the sequence.
Definition: trans_seq.c:313
unsigned int m
Definition: trans_seq.h:297
void SimplifyTransSeq(TTransSeq *ts)
Reduces the complexity of the tranform sequence.
Definition: trans_seq.c:483
double ** p
Definition: trans_seq.h:146
unsigned int u
Definition: trans_seq.h:138