GTS Library Reference Manual |
---|
#include <gts.h> #define gts_vector_init (v, p1, p2) #define gts_vector_scalar (v1, v2) #define gts_vector_cross (C,A,B) #define gts_vector_norm (v) #define gts_vector_normalize (v)void gts_vector_print (GtsVector v,FILE *fptr);void gts_vector4_print (GtsVector4 v,FILE *fptr); typedef GtsMatrix; GtsMatrix* gts_matrix_new (gdouble a00,gdouble a01,gdouble a02,gdouble a03,gdouble a10,gdouble a11,gdouble a12,gdouble a13,gdouble a20,gdouble a21,gdouble a22,gdouble a23,gdouble a30,gdouble a31,gdouble a32,gdouble a33);void gts_matrix_assign (GtsMatrix *m,gdouble a00,gdouble a01,gdouble a02,gdouble a03,gdouble a10,gdouble a11,gdouble a12,gdouble a13,gdouble a20,gdouble a21,gdouble a22,gdouble a23,gdouble a30,gdouble a31,gdouble a32,gdouble a33); GtsMatrix* gts_matrix_zero (GtsMatrix *m); GtsMatrix* gts_matrix_identity (GtsMatrix *m); GtsMatrix* gts_matrix_projection (GtsTriangle *t); GtsMatrix* gts_matrix_scale (GtsMatrix *m,GtsVector s); GtsMatrix* gts_matrix_translate (GtsMatrix *m,GtsVector t); GtsMatrix* gts_matrix_rotate (GtsMatrix *m,GtsVector r,gdouble angle); GtsMatrix* gts_matrix_transpose (GtsMatrix *m);gdouble gts_matrix_determinant (GtsMatrix *m); GtsMatrix* gts_matrix_inverse (GtsMatrix *m); GtsMatrix* gts_matrix3_inverse (GtsMatrix *m); GtsMatrix* gts_matrix_product (GtsMatrix *m1, GtsMatrix *m2);guint gts_matrix_compatible_row (GtsMatrix *A,GtsVector b,guint n,GtsVector A1,gdouble b1);guint gts_matrix_quadratic_optimization (GtsMatrix *A,GtsVector b,guint n, GtsMatrix *H,GtsVector c);void gts_matrix_print (GtsMatrix *m,FILE *fptr);void gts_matrix_destroy (GtsMatrix *m);
The functions described in this section allow to perform simple transformations on point coordinates. In particular projection onto a plane passing through the vertices of a given triangle or quadratic optimization problems.
#define gts_vector_init(v, p1, p2)
Given two points p1
and p2
, fills v
with the coordinates of vector p1
->p2
.
v : | a |
p1 : | a GtsPoint. |
p2 : | another GtsPoint. |
#define gts_vector_scalar(v1, v2)
Given two vectors v1
and v2
evaluates to the scalar product v1
.v2
.
v1 : | a |
v2 : | another |
#define gts_vector_cross(C,A,B)
Given two vectors A
and B
fills C
with the coordinates of the cross-product A
^B
.
C : | a |
A : | another |
B : | and another. |
void gts_vector_print (GtsVector v,FILE *fptr);
Print s
to file fptr
.
v : | a |
fptr : | a file descriptor. |
void gts_vector4_print (GtsVector4 v,FILE *fptr);
Print v
to file fptr
.
v : | a |
fptr : | a file descriptor. |
GtsMatrix* gts_matrix_new (gdouble a00,gdouble a01,gdouble a02,gdouble a03,gdouble a10,gdouble a11,gdouble a12,gdouble a13,gdouble a20,gdouble a21,gdouble a22,gdouble a23,gdouble a30,gdouble a31,gdouble a32,gdouble a33);
Allocates memory and initializes a new GtsMatrix.
a00 : | element [0][0]. |
a01 : | element [0][1]. |
a02 : | element [0][2]. |
a03 : | element [0][3]. |
a10 : | element [1][0]. |
a11 : | element [1][1]. |
a12 : | element [1][2]. |
a13 : | element [1][3]. |
a20 : | element [2][0]. |
a21 : | element [2][1]. |
a22 : | element [2][2]. |
a23 : | element [2][3]. |
a30 : | element [3][0]. |
a31 : | element [3][1]. |
a32 : | element [3][2]. |
a33 : | element [3][3]. |
Returns : | a pointer to the newly created GtsMatrix. |
void gts_matrix_assign (GtsMatrix *m,gdouble a00,gdouble a01,gdouble a02,gdouble a03,gdouble a10,gdouble a11,gdouble a12,gdouble a13,gdouble a20,gdouble a21,gdouble a22,gdouble a23,gdouble a30,gdouble a31,gdouble a32,gdouble a33);
Set values of matrix elements.
m : | a GtsMatrix. |
a00 : | element [0][0]. |
a01 : | element [0][1]. |
a02 : | element [0][2]. |
a03 : | element [0][3]. |
a10 : | element [1][0]. |
a11 : | element [1][1]. |
a12 : | element [1][2]. |
a13 : | element [1][3]. |
a20 : | element [2][0]. |
a21 : | element [2][1]. |
a22 : | element [2][2]. |
a23 : | element [2][3]. |
a30 : | element [3][0]. |
a31 : | element [3][1]. |
a32 : | element [3][2]. |
a33 : | element [3][3]. |
GtsMatrix* gts_matrix_zero (GtsMatrix *m);
Initializes m
to zeros. Allocates a matrix if m
is NULL.
m : | a GtsMatrix or $NULL. |
Returns : | the zero'ed matrix. |
GtsMatrix* gts_matrix_identity (GtsMatrix *m);
Initializes m
to an identity matrix. Allocates a matrix if m
is NULL.
m : | a GtsMatrix or NULL. |
Returns : | the identity matrix. |
GtsMatrix* gts_matrix_projection (GtsTriangle *t);
Creates a new GtsMatrix representing the projection onto a plane of normal
given by t
.
t : | a GtsTriangle. |
Returns : | a pointer to the newly created GtsMatrix. |
GtsMatrix* gts_matrix_scale (GtsMatrix *m,GtsVector s);
Initializes m
to a scaling matrix for s
. Allocates a matrix if m
is NULL.
m : | a GtsMatrix or NULL. |
s : | the scaling vector. |
Returns : | the scaling matrix. |
GtsMatrix* gts_matrix_translate (GtsMatrix *m,GtsVector t);
Initializes m
to a translation matrix for t
. Allocates a new
matrix if m
is NULL.
m : | a GtsMatrix or NULL. |
t : | the translation vector. |
Returns : | the translation matix. |
GtsMatrix* gts_matrix_rotate (GtsMatrix *m,GtsVector r,gdouble angle);
Initializes m
to a rotation matrix around r
by angle
.
Allocates a new matrix if m
is NULL.
m : | a GtsMatrix or NULL. |
r : | the rotation axis. |
angle : | the angle (in radians) to rotate by. |
Returns : | the rotation matrix. |
GtsMatrix* gts_matrix_transpose (GtsMatrix *m);
m : | a GtsMatrix. |
Returns : | a pointer to a newly created GtsMatrix transposed of |
gdouble gts_matrix_determinant (GtsMatrix *m);
m : | a GtsMatrix. |
Returns : | the value of det( |
GtsMatrix* gts_matrix_inverse (GtsMatrix *m);
m : | a GtsMatrix. |
Returns : | a pointer to a newly created GtsMatrix inverse of |
GtsMatrix* gts_matrix3_inverse (GtsMatrix *m);
m : | a 3x3 GtsMatrix. |
Returns : | a pointer to a newly created 3x3 GtsMatrix inverse of |
GtsMatrix* gts_matrix_product (GtsMatrix *m1, GtsMatrix *m2);
m1 : | a GtsMatrix. |
m2 : | another GtsMatrix. |
Returns : | a new GtsMatrix, product of |
guint gts_matrix_compatible_row (GtsMatrix *A,GtsVector b,guint n,GtsVector A1,gdouble b1);
Given a system of n
constraints A.x
=b
adds to it the compatible
constraints defined by A1.x
=b1
. The compatibility is determined
by insuring that the resulting system is well-conditioned (see
Lindstrom and Turk (1998, 1999)).
A : | a GtsMatrix. |
b : | a |
n : | the number of previous constraints of |
A1 : | a GtsMatrix. |
b1 : | a |
Returns : | the number of constraints of the resulting system. |
guint gts_matrix_quadratic_optimization (GtsMatrix *A,GtsVector b,guint n, GtsMatrix *H,GtsVector c);
Solve a quadratic optimization problem: Given a quadratic objective function
f which can be written as: f(x) = x^t.H.x
+ c
^t.x + k, where H
is the
symmetric positive definite Hessian of f and k is a constant, find the
minimum of f subject to the set of n
prior linear constraints, defined by
the first n
rows of A
and b
(A.x
= b
). The new constraints given by
the minimization are added to A
and b
only if they are linearly
independent as determined by gts_matrix_compatible_row()
.
A : | a GtsMatrix. |
b : | a |
n : | the number of constraints (must be smaller than 3). |
H : | a symmetric positive definite Hessian. |
c : | a |
Returns : | the new number of constraints defined by |
void gts_matrix_print (GtsMatrix *m,FILE *fptr);
Print m
to file fptr
.
m : | a GtsMatrix. |
fptr : | a file descriptor. |
<<< First In First Out heaps | Simple statistics >>> |