79 lines
2 KiB
C
79 lines
2 KiB
C
|
#ifndef VECTOR3_H
|
||
|
#define VECTOR3_H
|
||
|
|
||
|
#include "basics_global.h"
|
||
|
|
||
|
/*
|
||
|
* Cartesian coordinates (X, Y, Z) - right handed :
|
||
|
*
|
||
|
* Y (up)
|
||
|
* |
|
||
|
* |
|
||
|
* +----X
|
||
|
* /
|
||
|
* /
|
||
|
* Z
|
||
|
*
|
||
|
* Spherical coordinates (R, PHI, THETA) :
|
||
|
*
|
||
|
* R is the distance to origin
|
||
|
* PHI is typical azimuth
|
||
|
* THETA is elevation angle (not polar angle!)
|
||
|
*
|
||
|
* X=1 Y=0 Z=0 => PHI=0
|
||
|
* X=0 Y=0 Z=-1 => PHI=PI/2
|
||
|
* X=-1 Y=0 Z=0 => PHI=PI
|
||
|
* X=0 Y=0 Z=1 => PHI=3*PI/2
|
||
|
*
|
||
|
* X=1 Y=0 Z=0 => THETA=0
|
||
|
* X=0 Y=1 Z=0 => THETA=PI/2
|
||
|
* X=0 Y=-1 Z=0 => THETA=-PI/2
|
||
|
*/
|
||
|
|
||
|
namespace paysages {
|
||
|
namespace system {class PackStream;}
|
||
|
}
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
double x;
|
||
|
double y;
|
||
|
double z;
|
||
|
} Vector3;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
double r;
|
||
|
double theta;
|
||
|
double phi;
|
||
|
} VectorSpherical;
|
||
|
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_ZERO;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_DOWN;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_UP;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_NORTH;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_SOUTH;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_EAST;
|
||
|
BASICSSHARED_EXPORT extern Vector3 VECTOR_WEST;
|
||
|
|
||
|
static inline Vector3 v3(double x, double y, double z)
|
||
|
{
|
||
|
Vector3 result = {x, y, z};
|
||
|
return result;
|
||
|
}
|
||
|
BASICSSHARED_EXPORT void v3Save(PackStream* stream, Vector3* v);
|
||
|
BASICSSHARED_EXPORT void v3Load(PackStream* stream, Vector3* v);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Translate(Vector3 v1, double x, double y, double z);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Add(Vector3 v1, Vector3 v2);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Sub(Vector3 v1, Vector3 v2);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Neg(Vector3 v);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Scale(Vector3 v, double scale);
|
||
|
BASICSSHARED_EXPORT double v3Norm(Vector3 v);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Normalize(Vector3 v);
|
||
|
BASICSSHARED_EXPORT double v3Dot(Vector3 v1, Vector3 v2);
|
||
|
BASICSSHARED_EXPORT Vector3 v3Cross(Vector3 v1, Vector3 v2);
|
||
|
BASICSSHARED_EXPORT VectorSpherical v3ToSpherical(Vector3 v);
|
||
|
BASICSSHARED_EXPORT Vector3 v3FromSpherical(VectorSpherical v);
|
||
|
|
||
|
#endif // VECTOR3_H
|