GR Engine
A physics engine in curved space-time
Main Page
Classes
Files
File List
File Members
All
Classes
Files
Functions
Variables
engine
geometry.h
Go to the documentation of this file.
1
#ifndef __GEOMETRY__
2
#define __GEOMETRY__
3
8
#ifndef NULL
9
#define NULL 0
10
#endif
11
12
class
Manifold
;
13
14
extern
Manifold
* gManifold;
15
21
class
vector4
22
{
23
double
v[4];
24
public
:
26
28
vector4
();
30
35
vector4
(
double
v1,
double
v2,
double
v3,
double
v4);
37
~vector4
();
38
39
vector4
& operator=(
const
vector4
&);
40
vector4
operator+(
const
vector4
);
41
vector4
operator+=(
const
vector4
);
42
vector4
operator-(
const
vector4
);
43
vector4
operator-=(
const
vector4
);
44
vector4
operator*(
const
double
);
45
vector4
operator*=(
const
double
);
46
vector4
operator/(
const
double
);
47
vector4
operator/=(
const
double
);
48
friend
vector4
operator*(
const
double
,
const
vector4
);
49
51
54
double
&
operator[]
(
int
i);
55
};
56
62
class
Point
63
{
64
double
x[4];
65
int
coordSystem;
66
static
Manifold
* m;
67
public
:
69
Point
();
71
77
Point
(
int
cS,
double
x0=0.0,
double
x1=0.0,
double
x2=0.0,
double
x3=0.0);
79
82
Point
(
int
cS,
double
tx[]);
84
87
Point
(
int
cS,
vector4
v);
89
Point
(
const
Point
&);
91
~Point
();
92
94
97
double
&
operator[]
(
int
i);
99
/* \return The number of the coordinate system in use
100
*/
101
int
getCoordSystem
();
103
/* \return A vector4 with components equal to the coordinates of the point
104
*/
105
vector4
toVector4
();
106
107
bool
operator==(
Point
);
108
bool
operator!=(
Point
);
109
111
/* This method sets the manifold being used in the whole program
112
* \param _m The pointer to the manifold object
113
*/
114
static
void
setGlobalManifold
(
Manifold
* _m);
115
};
116
122
class
CoordinateConversion
123
{
124
public
:
126
CoordinateConversion
();
128
virtual
~CoordinateConversion
();
129
131
135
virtual
Point
convertPoint
(
Point
p) = 0;
137
143
virtual
double
jacobian
(
int
i,
int
j,
Point
p) = 0;
145
151
virtual
double
inv_jacobian
(
int
i,
int
j,
Point
p) = 0;
152
};
153
159
class
IdentityConversion
:
public
CoordinateConversion
160
{
161
public
:
163
IdentityConversion
();
165
~IdentityConversion
();
166
168
172
Point
convertPoint
(
Point
p);
174
180
double
jacobian
(
int
i,
int
j,
Point
);
182
188
double
inv_jacobian
(
int
i,
int
j,
Point
);
189
};
190
196
class
Metric
197
{
198
Point
gCachePoints[4][4];
199
Point
invgCachePoints[4][4];
200
Point
gammaCachePoints[4][4][4];
201
202
double
gCache[4][4];
203
double
invgCache[4][4];
204
double
gammaCache[4][4][4];
205
protected
:
206
int
coordSystem;
208
215
double
dg
(
int
i,
int
j,
int
k,
Point
p);
216
218
224
virtual
double
_g
(
int
i,
int
j,
Point
p) = 0;
226
232
virtual
double
_invg
(
int
i,
int
j,
Point
p) = 0;
234
241
virtual
double
_christoffel
(
int
i,
int
j,
int
k,
Point
p) = 0;
242
public
:
244
246
Metric
(
int
cS);
248
virtual
~Metric
();
249
251
258
double
g
(
int
i,
int
j,
Point
p);
260
267
double
invg
(
int
i,
int
j,
Point
p);
269
277
double
christoffel
(
int
i,
int
j,
int
k,
Point
p);
278
280
286
double
g
(
vector4
u,
vector4
v,
Point
p);
287
289
295
vector4
christoffel
(
vector4
u,
vector4
v,
Point
p);
296
};
297
303
class
Manifold
304
{
305
protected
:
306
int
nCoordSystems;
307
CoordinateConversion
*** conversions;
308
Metric
** metrics;
309
public
:
311
Manifold
();
313
virtual
~Manifold
();
314
316
320
CoordinateConversion
*
getConversion
(
int
i,
int
j);
//returns conversion from i to j
322
325
Metric
*
getMetric
(
int
i);
327
331
Point
convertPointTo
(
Point
p,
int
system);
//convert point to coordinates
333
338
vector4
convertVectorTo
(
vector4
v,
Point
p,
int
system);
//convert vector to coordinates
339
341
344
virtual
int
recommendCoordSystem
(
Point
p);
345
};
346
347
#endif
348
Generated on Wed May 8 2013 19:49:51 for GR Engine by
1.8.3.1