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  double val;
148  int s;
152  double *vect;
153  double **p;
155 } TTrans;
156 
165 void InitCtTrans(THTransform *ct,TTrans *t);
166 
178 void InitVarTrans(unsigned int tp,int s,unsigned int v,TTrans *t);
179 
191 void InitTVTrans(int s,unsigned int v,double *vect,TTrans *t);
192 
216 void InitPatchTrans(unsigned int tp,int s,unsigned int u,unsigned int v,
217  double **p,TTrans *t);
218 
224 void CopyTrans(TTrans *t_dst,TTrans *t_src);
225 
234 void TransInvert(TTrans *ti,TTrans *t);
235 
246 boolean TransHasVar(unsigned int v,TTrans *t);
247 
263 void EvaluateVectorsPATrans(double u,double v,double *x,double *y,double *h,TTrans *t);
264 
279 void EvaluateTrans(double v1,double v2,THTransform *a,TTrans *t);
280 
296 void EvaluatePATrans(double u,double v,THTransform *a,TTrans *t);
297 
305 void DeleteTrans(TTrans *t);
306 
319 typedef struct {
320  unsigned int m;
321  unsigned int n;
322  TTrans **t;
323 } TTransSeq;
324 
332 void InitTransSeq(TTransSeq *ts);
333 
342 void CopyTransSeq(TTransSeq *ts_dst,TTransSeq *ts_src);
343 
352 void ResetTransSeq(TTransSeq *ts);
353 
361 boolean IsEmptyTransSeq(TTransSeq *ts);
362 
377 boolean HasCtRotTransSeq(TTransSeq *ts);
378 
388 unsigned int TransSeqSize(TTransSeq *ts);
389 
401 TTrans *GetElementFromTransSeq(unsigned int i,TTransSeq *ts);
402 
411 void AddTrans2TransSeq(TTrans *t,TTransSeq *ts);
412 
425 
436 void AddVarTrans2TransSeq(unsigned int t,int s,unsigned int v,TTransSeq *ts);
437 
448 void AddDispTrans2TransSeq(int s,unsigned int v,double *vect,TTransSeq *ts);
449 
462 void AddPatchTrans2TransSeq(unsigned int t,int s,unsigned int u,unsigned int v,
463  double **p,TTransSeq *ts);
464 
474 boolean VarIncludedinTransSeq(unsigned int v,TTransSeq *ts);
475 
486 void UpdateUsedDOF(unsigned int *dof,TTransSeq *ts);
487 
501 void ShiftVariablesInTransSeq(unsigned int nv,TTransSeq *ts);
502 
517 boolean FixVarInTransSeq(unsigned int nv,double v,THTransform *ctt,TTransSeq *ts);
518 
529 void ReplaceVarInTransSeq(unsigned int nv,unsigned int nvNew,TTransSeq *ts);
530 
545 void SimplifyTransSeq(TTransSeq *ts);
546 
561 void DeriveTransSeq(unsigned int v,unsigned int *n,TTransSeq ***tsd,TTransSeq *ts);
562 
572 void EvaluateTransSeq(double *v,THTransform *r,TTransSeq *ts);
573 
584 void PrintTransSeq(FILE *f,char **varNames,TTransSeq *ts);
585 
593 void DeleteTransSeq(TTransSeq *ts);
594 
595 #endif
Definition of the boolean type.
double val
Definition: trans_seq.h:141
boolean TransHasVar(unsigned int v, TTrans *t)
Identifies if a variable is involved in a given transform.
Definition: trans_seq.c:150
void CopyTransSeq(TTransSeq *ts_dst, TTransSeq *ts_src)
Constructor.
Definition: trans_seq.c:457
boolean FixVarInTransSeq(unsigned int nv, double v, THTransform *ctt, TTransSeq *ts)
Set a variable to a constant value.
Definition: trans_seq.c:723
void EvaluatePATrans(double u, double v, THTransform *a, TTrans *t)
Evaluates a PA transform.
Definition: trans_seq.c:406
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:61
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:615
void UpdateUsedDOF(unsigned int *dof, TTransSeq *ts)
Determines the dof used in a transform sequence.
Definition: trans_seq.c:645
A homgeneous transform in R^3.
void ShiftVariablesInTransSeq(unsigned int nv, TTransSeq *ts)
Adjust variable indices after removing a variable.
Definition: trans_seq.c:705
unsigned int v
Definition: trans_seq.h:139
void ReplaceVarInTransSeq(unsigned int nv, unsigned int nvNew, TTransSeq *ts)
Replaces a variable.
Definition: trans_seq.c:831
void EvaluateTransSeq(double *v, THTransform *r, TTransSeq *ts)
Evaluates the transform sequence.
Definition: trans_seq.c:997
void InitTransSeq(TTransSeq *ts)
Constructor.
Definition: trans_seq.c:450
boolean VarIncludedinTransSeq(unsigned int v, TTransSeq *ts)
Determines if the sequence includes a given variable.
Definition: trans_seq.c:630
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:155
void PrintTransSeq(FILE *f, char **varNames, TTransSeq *ts)
Prints a transform sequence to a file.
Definition: trans_seq.c:1074
void AddTrans2TransSeq(TTrans *t, TTransSeq *ts)
Adds a transform to a transform sequence.
Definition: trans_seq.c:514
unsigned int TransSeqSize(TTransSeq *ts)
Number of elements in the transform sequence.
Definition: trans_seq.c:501
void DeleteTrans(TTrans *t)
Destructor.
Definition: trans_seq.c:421
void DeleteTransSeq(TTransSeq *ts)
Destructor.
Definition: trans_seq.c:1288
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:484
A step in a transform sequence.
Definition: trans_seq.h:136
THTransform * ct
Definition: trans_seq.h:150
void ResetTransSeq(TTransSeq *ts)
Semi-destructor.
Definition: trans_seq.c:472
void InitVarTrans(unsigned int tp, int s, unsigned int v, TTrans *t)
Initializes a variable transform.
Definition: trans_seq.c:34
boolean HasCtRotTransSeq(TTransSeq *ts)
Checks if the tranform sequence includes contant rotations.
Definition: trans_seq.c:489
double * vect
Definition: trans_seq.h:152
unsigned int n
Definition: trans_seq.h:321
TTrans * GetElementFromTransSeq(unsigned int i, TTransSeq *ts)
Returns an element from a transform sequence.
Definition: trans_seq.c:506
Definition of the THTransform type and the associated functions.
A sequence of transforms.
Definition: trans_seq.h:319
TTrans ** t
Definition: trans_seq.h:322
void AddVarTrans2TransSeq(unsigned int t, int s, unsigned int v, TTransSeq *ts)
Adds a variable transform to the sequence.
Definition: trans_seq.c:578
void CopyTrans(TTrans *t_dst, TTrans *t_src)
Constructor.
Definition: trans_seq.c:103
void InitTVTrans(int s, unsigned int v, double *vect, TTrans *t)
Initializes a TV transform.
Definition: trans_seq.c:48
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:601
int s
Definition: trans_seq.h:148
void DeriveTransSeq(unsigned int v, unsigned int *n, TTransSeq ***tsd, TTransSeq *ts)
Derive a sequence of transforms.
Definition: trans_seq.c:868
void TransInvert(TTrans *ti, TTrans *t)
Invert a transform.
Definition: trans_seq.c:141
void AddCtTrans2TransSeq(THTransform *t, TTransSeq *ts)
Adds a constant transform to the sequence.
Definition: trans_seq.c:550
void EvaluateTrans(double v1, double v2, THTransform *a, TTrans *t)
Evaluates a transform.
Definition: trans_seq.c:174
unsigned int m
Definition: trans_seq.h:320
void SimplifyTransSeq(TTransSeq *ts)
Reduces the complexity of the tranform sequence.
Definition: trans_seq.c:846
double ** p
Definition: trans_seq.h:153
unsigned int u
Definition: trans_seq.h:138