⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 nv_algebra.h

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 H
📖 第 1 页 / 共 2 页
字号:
        mat_array[i * 3 + 2] = v.z;	}    void set_rot(const nv_scalar & theta, const vec3 & v);    void set_rot(const vec3 & u, const vec3 & v);    union {        struct {            nv_scalar a00, a10, a20;        // standard names for components            nv_scalar a01, a11, a21;        // standard names for components            nv_scalar a02, a12, a22;        // standard names for components        };        nv_scalar mat_array[9];     // array access    };};const vec3 operator*(const mat3&, const vec3&);const vec3 operator*(const vec3&, const mat3&);struct DECLSPEC_NV_MATH mat4{    mat4();    mat4(const nv_scalar * array);    mat4(const mat4 & M);    mat4( const nv_scalar& f0,  const nv_scalar& f1,  const nv_scalar& f2,  const nv_scalar& f3,  		  const nv_scalar& f4,  const nv_scalar& f5,  const nv_scalar& f6,  const nv_scalar& f7,  		  const nv_scalar& f8,  const nv_scalar& f9,  const nv_scalar& f10, const nv_scalar& f11,  		  const nv_scalar& f12, const nv_scalar& f13, const nv_scalar& f14, const nv_scalar& f15 )  		  : a00( f0 ), a10( f1 ), a20( f2 ), a30( f3 ),  		    a01( f4 ), a11( f5 ), a21( f6 ), a31( f7 ),  		    a02( f8 ), a12( f9 ), a22( f10), a32( f11),			a03( f12), a13( f13), a23( f14), a33( f15) { }     const vec4 col(const int i) const    {        return vec4(&mat_array[i * 4]);    }        const vec4 operator[](const int& i) const    {        return vec4(mat_array[i], mat_array[i + 4], mat_array[i + 8], mat_array[i + 12]);    }       const nv_scalar& operator()(const int& i, const int& j) const    {        return mat_array[ j * 4 + i ];    }    nv_scalar& operator()(const int& i, const int& j)    {        return  mat_array[ j * 4 + i ];    }    void set_col(int i, const vec4 & v)    {        mat_array[i * 4] = v.x;        mat_array[i * 4 + 1] = v.y;        mat_array[i * 4 + 2] = v.z;        mat_array[i * 4 + 3] = v.w;    }    void set_row(int i, const vec4 & v)    {        mat_array[i] = v.x;        mat_array[i + 4] = v.y;        mat_array[i + 8] = v.z;        mat_array[i + 12] = v.w;    }    mat3 & get_rot(mat3 & M) const;    quat & get_rot(quat & q) const;    void set_rot(const quat & q);    void set_rot(const mat3 & M);    void set_rot(const nv_scalar & theta, const vec3 & v);    void set_rot(const vec3 & u, const vec3 & v);    void set_translation(const vec3 & t);    vec3 & get_translation(vec3 & t) const;	mat4 operator*(const mat4&) const;    union {        struct {            nv_scalar a00, a10, a20, a30;   // standard names for components            nv_scalar a01, a11, a21, a31;   // standard names for components            nv_scalar a02, a12, a22, a32;   // standard names for components            nv_scalar a03, a13, a23, a33;   // standard names for components        };        struct {            nv_scalar _11, _12, _13, _14;   // standard names for components            nv_scalar _21, _22, _23, _24;   // standard names for components            nv_scalar _31, _32, _33, _34;   // standard names for components            nv_scalar _41, _42, _43, _44;   // standard names for components        };        union {            struct {                nv_scalar b00, b10, b20, p; // standard names for components                nv_scalar b01, b11, b21, q; // standard names for components                nv_scalar b02, b12, b22, r; // standard names for components                nv_scalar x, y, z, w;       // standard names for components            };        };        nv_scalar mat_array[16];     // array access    };};const vec4 operator*(const mat4&, const vec4&);const vec4 operator*(const vec4&, const mat4&);// quaternionstruct DECLSPEC_NV_MATH quat {public:	quat(nv_scalar x = 0, nv_scalar y = 0, nv_scalar z = 0, nv_scalar w = 1);	quat(const quat& quat);	quat(const vec3& axis, nv_scalar angle);	quat(const mat3& rot);	quat& operator=(const quat& quat);	quat operator-()	{		return quat(-x, -y, -z, -w);	}	quat Inverse();	void Normalize();	void FromMatrix(const mat3& mat);	void ToMatrix(mat3& mat) const;	quat& operator*=(const quat& quat);	static const quat Identity;	nv_scalar& operator[](int i) { return comp[i]; }	const nv_scalar operator[](int i) const { return comp[i]; }	union {		struct {			nv_scalar x, y, z, w;		};		nv_scalar comp[4];	};};const quat operator*(const quat&, const quat&);extern quat & conj(quat & p, const quat & q);extern quat & add_quats(quat & p, const quat & q1, const quat & q2);extern nv_scalar dot(const quat & p, const quat & q);extern quat & dot(nv_scalar s, const quat & p, const quat & q);extern quat & slerp_quats(quat & p, nv_scalar s, const quat & q1, const quat & q2);extern quat & axis_to_quat(quat & q, const vec3 & a, const nv_scalar phi);extern mat3 & quat_2_mat(mat3 &M, const quat &q );extern quat & mat_2_quat(quat &q,const mat3 &M);// constant algebraic valuesconst nv_scalar array16_id[] =        { nv_one, nv_zero, nv_zero, nv_zero,                                        nv_zero, nv_one, nv_zero, nv_zero,                                        nv_zero, nv_zero, nv_one, nv_zero,                                        nv_zero, nv_zero, nv_zero, nv_one};const nv_scalar array16_null[] =      { nv_zero, nv_zero, nv_zero, nv_zero,                                        nv_zero, nv_zero, nv_zero, nv_zero,                                        nv_zero, nv_zero, nv_zero, nv_zero,                                        nv_zero, nv_zero, nv_zero, nv_zero};const nv_scalar array16_scale_bias[] = { nv_zero_5, nv_zero,   nv_zero,   nv_zero,                                         nv_zero,   nv_zero_5, nv_zero,   nv_zero,                                         nv_zero,   nv_zero,   nv_zero_5, nv_zero,                                         nv_zero_5, nv_zero_5, nv_zero_5, nv_one};const nv_scalar array9_id[] =         { nv_one, nv_zero, nv_zero,                                        nv_zero, nv_one, nv_zero,                                        nv_zero, nv_zero, nv_one};const vec2      vec2_null(nv_zero,nv_zero);const vec4      vec4_one(nv_one,nv_one,nv_one,nv_one);const vec3      vec3_one(nv_one,nv_one,nv_one);const vec3      vec3_null(nv_zero,nv_zero,nv_zero);const vec3      vec3_x(nv_one,nv_zero,nv_zero);const vec3      vec3_y(nv_zero,nv_one,nv_zero);const vec3      vec3_z(nv_zero,nv_zero,nv_one);const vec3      vec3_neg_x(-nv_one,nv_zero,nv_zero);const vec3      vec3_neg_y(nv_zero,-nv_one,nv_zero);const vec3      vec3_neg_z(nv_zero,nv_zero,-nv_one);const vec4      vec4_null(nv_zero,nv_zero,nv_zero,nv_zero);const vec4      vec4_x(nv_one,nv_zero,nv_zero,nv_zero);const vec4      vec4_neg_x(-nv_one,nv_zero,nv_zero,nv_zero);const vec4      vec4_y(nv_zero,nv_one,nv_zero,nv_zero);const vec4      vec4_neg_y(nv_zero,-nv_one,nv_zero,nv_zero);const vec4      vec4_z(nv_zero,nv_zero,nv_one,nv_zero);const vec4      vec4_neg_z(nv_zero,nv_zero,-nv_one,nv_zero);const vec4      vec4_w(nv_zero,nv_zero,nv_zero,nv_one);const vec4      vec4_neg_w(nv_zero,nv_zero,nv_zero,-nv_one);const quat      quat_id(nv_zero,nv_zero,nv_zero,nv_one);const mat4      mat4_id(array16_id);const mat3      mat3_id(array9_id);const mat4      mat4_null(array16_null);const mat4      mat4_scale_bias(array16_scale_bias);// normalizes a vector and return a reference of itselfextern vec3 & normalize(vec3 & u);extern vec4 & normalize(vec4 & u);// Computes the squared magnitudeinline nv_scalar nv_sq_norm(const vec3 & n){ return n.x * n.x + n.y * n.y + n.z * n.z; }inline nv_scalar nv_sq_norm(const vec4 & n){ return n.x * n.x + n.y * n.y + n.z * n.z + n.w * n.w; }// Computes the magnitudeinline nv_scalar nv_norm(const vec3 & n){ return sqrtf(nv_sq_norm(n)); }inline nv_scalar nv_norm(const vec4 & n){ return sqrtf(nv_sq_norm(n)); }// computes the cross product ( v cross w) and stores the result in u// i.e.     u = v cross wextern vec3 & cross(vec3 & u, const vec3 & v, const vec3 & w);// computes the dot product ( v dot w) and stores the result in u// i.e.     u = v dot wextern nv_scalar & dot(nv_scalar & u, const vec3 & v, const vec3 & w);extern nv_scalar dot(const vec3 & v, const vec3 & w);extern nv_scalar & dot(nv_scalar & u, const vec4 & v, const vec4 & w);extern nv_scalar dot(const vec4 & v, const vec4 & w);extern nv_scalar & dot(nv_scalar & u, const vec3 & v, const vec4 & w);extern nv_scalar dot(const vec3 & v, const vec4 & w);extern nv_scalar & dot(nv_scalar & u, const vec4 & v, const vec3 & w);extern nv_scalar dot(const vec4 & v, const vec3 & w);// compute the reflected vector R of L w.r.t N - vectors need to be // normalized////                R     N     L//                  _       _//                 |\   ^   /|//                   \  |  ///                    \ | ///                     \|///                      +extern vec3 & reflect(vec3 & r, const vec3 & n, const vec3 & l);// Computes u = v * lambda + uextern vec3 & madd(vec3 & u, const vec3 & v, const nv_scalar & lambda);// Computes u = v * lambdaextern vec3 & mult(vec3 & u, const vec3 & v, const nv_scalar & lambda);// Computes u = v * wextern vec3 & mult(vec3 & u, const vec3 & v, const vec3 & w);// Computes u = v + wextern vec3 & add(vec3 & u, const vec3 & v, const vec3 & w);// Computes u = v - wextern vec3 & sub(vec3 & u, const vec3 & v, const vec3 & w);// Computes u = u * sextern vec3 & scale(vec3 & u, const nv_scalar s);extern vec4 & scale(vec4 & u, const nv_scalar s);// Computes u = M * vextern vec3 & mult(vec3 & u, const mat3 & M, const vec3 & v);extern vec4 & mult(vec4 & u, const mat4 & M, const vec4 & v);// Computes u = v * Mextern vec3 & mult(vec3 & u, const vec3 & v, const mat3 & M);extern vec4 & mult(vec4 & u, const vec4 & v, const mat4 & M);// Computes u = M(4x4) * v and divides by wextern vec3 & mult_pos(vec3 & u, const mat4 & M, const vec3 & v);// Computes u = M(4x4) * vextern vec3 & mult_dir(vec3 & u, const mat4 & M, const vec3 & v);// Computes u = M(4x4) * v and does not divide by w (assumed to be 1)extern vec3 & mult(vec3& u, const mat4& M, const vec3& v);// Computes u = v * M(4x4) and divides by wextern vec3 & mult_pos(vec3 & u, const vec3 & v, const mat4 & M);// Computes u = v * M(4x4)extern vec3 & mult_dir(vec3 & u, const vec3 & v, const mat4 & M);// Computes u = v * M(4x4) and does not divide by w (assumed to be 1)extern vec3 & mult(vec3& u, const vec3& v, const mat4& M);// Computes A += Bextern mat4 & add(mat4 & A, const mat4 & B);extern mat3 & add(mat3 & A, const mat3 & B);// Computes C = A * Bextern mat4 & mult(mat4 & C, const mat4 & A, const mat4 & B);extern mat3 & mult(mat3 & C, const mat3 & A, const mat3 & B);// Computes B = Transpose(A)//       T//  B = Aextern mat3 & transpose(mat3 & B, const mat3 & A);extern mat4 & transpose(mat4 & B, const mat4 & A);extern mat3 & transpose(mat3 & B);extern mat4 & transpose(mat4 & B);// Computes B = inverse(A)//       -1//  B = Aextern mat4 & invert(mat4 & B, const mat4 & A);extern mat3 & invert(mat3 & B, const mat3 & A);// Computes B = inverse(A)//                                       T  T//                   (R t)             (R -R t)// assuming that A = (0 1) so that B = (0    1)//  B = Aextern mat4 & invert_rot_trans(mat4 & B, const mat4 & A);extern mat4 & look_at(mat4 & M, const vec3 & eye, const vec3 & center, const vec3 & up);extern mat4 & frustum(mat4 & M, const nv_scalar l, const nv_scalar r, const nv_scalar b,                const nv_scalar t, const nv_scalar n, const nv_scalar f);extern mat4 & perspective(mat4 & M, const nv_scalar fovy, const nv_scalar aspect, const nv_scalar n, const nv_scalar f);// quaternionextern quat & normalize(quat & p);extern quat & conj(quat & p);extern quat & conj(quat & p, const quat & q);extern quat & add_quats(quat & p, const quat & q1, const quat & q2);extern quat & axis_to_quat(quat & q, const vec3 & a, const nv_scalar phi);extern mat3 & quat_2_mat(mat3 &M, const quat &q );extern quat & mat_2_quat(quat &q,const mat3 &M);extern quat & mat_2_quat(quat &q,const mat4 &M);// surface propertiesextern mat3 & tangent_basis(mat3 & basis,const vec3 & v0,const vec3 & v1,const vec3 & v2,const vec2 & t0,const vec2 & t1,const vec2 & t2, const vec3 & n);// linear interpolationinline nv_scalar lerp(nv_scalar t, nv_scalar a, nv_scalar b){ return a * (nv_one - t) + t * b; }inline vec3 & lerp(vec3 & w, const nv_scalar & t, const vec3 & u, const vec3 & v){ w.x = lerp(t, u.x, v.x); w.y = lerp(t, u.y, v.y); w.z = lerp(t, u.z, v.z); return w; }// utilitiesinline nv_scalar nv_min(const nv_scalar & lambda, const nv_scalar & n){ return (lambda < n ) ? lambda : n; }inline nv_scalar nv_max(const nv_scalar & lambda, const nv_scalar & n){ return (lambda > n ) ? lambda : n; }inline nv_scalar nv_clamp(nv_scalar u, const nv_scalar min, const nv_scalar max){ u = (u < min) ? min : u; u = (u > max) ? max : u; return u; }extern nv_scalar nv_random();extern quat & trackball(quat & q, vec2 & pt1, vec2 & pt2, nv_scalar trackballsize);extern vec3 & cube_map_normal(int i, int x, int y, int cubesize, vec3 & v);// geometry// computes the area of a triangleextern nv_scalar nv_area(const vec3 & v1, const vec3 & v2, const vec3 &v3);// computes the perimeter of a triangleextern nv_scalar nv_perimeter(const vec3 & v1, const vec3 & v2, const vec3 &v3);// find the inscribed circleextern nv_scalar nv_find_in_circle( vec3 & center, const vec3 & v1, const vec3 & v2, const vec3 &v3);// find the circumscribed circleextern nv_scalar nv_find_circ_circle( vec3 & center, const vec3 & v1, const vec3 & v2, const vec3 &v3);// fast cosine functionsextern nv_scalar fast_cos(const nv_scalar x);extern nv_scalar ffast_cos(const nv_scalar x);// determinantnv_scalar det(const mat3 & A);extern void nv_is_valid(const vec3& v);extern void nv_is_valid(nv_scalar lambda);#endif //_nv_algebra_h_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -