Files
amsmathutil25/include/amsmathutil25/math/amsmathutil25_vec3.hpp

115 lines
2.6 KiB
C++

#ifndef __AMSMATHUTIL25_VEC3_HPP__
#define __AMSMATHUTIL25_VEC3_HPP__
namespace ams
{
class vec3;
class mat3;
class vec3
{
public:
double x;
double y;
double z;
vec3();
vec3(double _x, double _y, double _z);
vec3(const vec3 &rhs);
vec3& operator=(const vec3 &rhs);
bool operator==(const vec3 rhs) const;
vec3 operator+(vec3 rhs) const;
vec3 operator-(vec3 rhs) const;
vec3 operator*(double rhs) const;
vec3 operator/(double rhs) const;
friend vec3 operator-(vec3 rhs);
double& operator[](int ind);
const double& operator[](int ind) const;
//explicit conversion constructors for casting
explicit vec3(const vec2 rhs);
explicit vec3(const vec4 rhs);
explicit vec3(const vec2f rhs);
explicit vec3(const vec3f rhs);
explicit vec3(const vec4f rhs);
explicit vec3(const vec2i rhs);
explicit vec3(const vec3i rhs);
explicit vec3(const vec4i rhs);
};
//vector operations
double vec3_dot(vec3 v1, vec3 v2);
double vec3_norm(vec3 v);
vec3 vec3_normalize(vec3 v);
double vec3_dist(vec3 v1, vec3 v2);
vec3 vec3_cross(vec3 v1, vec3 v2);
vec3 vec3_proj(vec3 v1, vec3 v2);
mat3 vec3_hodgedual(vec3 v);
//vector operations (old nomenclature)
double vdot(vec3 v1, vec3 v2);
double vnorm(vec3 v);
vec3 vnormalize(vec3 v);
double vdist(vec3 v1, vec3 v2);
vec3 vcross(vec3 v1, vec3 v2);
vec3 vproj(vec3 v1, vec3 v2);
class mat3
{
public:
double data[9];
mat3();
mat3(double _xx, double _yx, double _zx, double _xy, double _yy, double _zy, double _xz, double _yz, double _zz);
mat3(const double *_data);
mat3(const mat3 &rhs);
mat3(const vec3 _col1, const vec3 _col2, const vec3 _col3);
mat3& operator=(const mat3 rhs);
bool operator==(const mat3 rhs) const;
mat3 operator+(mat3 rhs) const;
mat3 operator-(mat3 rhs) const;
mat3 operator*(mat3 rhs) const;
mat3 operator/(mat3 rhs) const;
mat3 operator*(double rhs) const;
mat3 operator/(double rhs) const;
vec3 operator*(vec3 rhs) const;
double& operator()(int I, int J);
double& operator[](int I);
const double& operator()(int I, int J) const;
const double& operator[](int I) const;
double& at(int I, int J);
const double& at(int I, int J) const;
double det();
mat3 inverse();
void invert();
mat3 transpose();
void dotranspose();
};
//matrix operations
mat3 mat3_eye();
mat3 mat3_zeros();
mat3 mat3_ones();
mat3 mat3_mult(mat3 a, mat3 b);
vec3 mat3_mult(vec3 a, mat3 b);
vec3 mat3_mult(mat3 a, vec3 b);
double mat3_det(mat3 a);
mat3 mat3_inverse(mat3 a);
mat3 mat3_transpose(mat3 a);
}; //end namespace ams
#endif