Player
Frontpage
Contents
User
Installation
Quick start
Supported devices
Tutorials
Utilities
Client libraries
FAQ
Help
Developer
Architecture
libplayercore
interfaces
libplayerdrivers
drivers
libplayercommon
libplayerutils
libplayersd
libplayertcp
libplayerxdr
TODO
Online
Homepage
Download
Project
Bugs
Help
server
drivers
position
mbicp
sp_matrix.h
1
/*
2
J. Neira
3
J. A. Castellanos
4
Robotics and Real Time Group
5
University of Zaragoza
6
7
sp_matrix.h
8
Implements basic MATRIX operations
9
*/
10
/*
11
* This program is free software; you can redistribute it and/or modify
12
* it under the terms of the GNU General Public License as published by
13
* the Free Software Foundation; either version 2 of the License, or
14
* (at your option) any later version.
15
*
16
* This program is distributed in the hope that it will be useful,
17
* but WITHOUT ANY WARRANTY; without even the implied warranty of
18
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
* GNU General Public License for more details.
20
*
21
* You should have received a copy of the GNU General Public License
22
* along with this program; if not, write to the Free Software
23
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24
*
25
*/
26
27
#ifndef _SP_MATRIX_H
28
#define _SP_MATRIX_H
29
30
#ifdef __cplusplus
31
extern
"C"
{
32
#endif
33
34
#define MAX_ROWS (7)
35
#define MAX_COLS (7)
36
37
typedef
struct
{
38
int
rows;
39
int
cols;
40
float
data[MAX_ROWS][MAX_COLS];
41
}
MATRIX
;
42
43
typedef
struct
{
44
int
elements;
45
float
data[MAX_ROWS];
46
}
VECTOR
;
47
48
#define DOF (3)
49
50
typedef
struct
{
51
int
mat[DOF];
52
int
range;
53
}
BMAT
;
54
55
#define MROWS(m) ((m).rows)
56
#define MCOLS(m) ((m).cols)
57
#define MDATA(m,i,j) ((m).data[i][j])
58
59
#define VELEMENTS(v) ((v).elements)
60
#define VDATA(v,i) ((v).data[i])
61
62
#define M_SQUARE(m) ((m).rows == (m).cols)
63
#define M_COMPAT_DIM(m, n) ((m).cols == (n).rows)
64
#define M_EQUAL_DIM(m, n) (((m).rows == (n).rows) && ((m).cols == (n).cols))
65
#define V_EQUAL_DIM(v, w) (((v).elements == (w).elements))
66
#define MV_COMPAT_DIM(m, v) ((m).cols == (v).elements)
67
68
#define FIRST(b) ((b).mat[0])
69
#define SECOND(b) ((b).mat[1])
70
#define THIRD(b) ((b).mat[2])
71
#define RANGE(b) ((b).range)
72
73
#define SQUARE(x) ((x)*(x))
74
75
MATRIX
create_matrix (
int
rows,
int
cols);
76
void
initialize_matrix (
MATRIX
*m,
int
rows,
int
cols);
77
void
diagonal_matrix (
MATRIX
*m,
int
dim,
float
el1,
float
el2,
float
el3);
78
void
print_matrix (
char
*message,
MATRIX
const
*m);
79
VECTOR
create_vector (
int
elements);
80
void
initialize_vector (
VECTOR
*v,
int
elements);
81
void
print_vector (
char
*message,
VECTOR
const
*v);
82
float
cross_product (
MATRIX
const
*m,
int
f1,
int
c1,
int
f2,
int
c2);
83
int
determinant (
MATRIX
const
*m,
float
*result);
84
int
inverse_matrix (
MATRIX
const
*m,
MATRIX
*n);
85
int
multiply_matrix_vector (
MATRIX
const
*m,
VECTOR
const
*v,
VECTOR
*r);
86
87
#ifdef __cplusplus
88
}
89
#endif
90
91
#endif
92
Last updated 12 September 2005 21:38:45