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

📄 nv_algebra.cpp

📁 robocup rcssserver 运行防真机器人足球比赛所用的服务器端
💻 CPP
📖 第 1 页 / 共 3 页
字号:
/*********************************************************************NVMH1****File:nv_algebra.cppCopyright (C) 1999, 2000 NVIDIA CorporationThis file is provided without support, instruction, or implied warranty of anykind.  NVIDIA makes no guarantee of its fitness for a particular purpose and isnot liable under any circumstances for any damages or loss whatsoever arisingfrom the use or inability to use this file or items derived from it.Comments: ******************************************************************************/#ifndef _nv_algebra_h_#include <nv_math/nv_math.h>#endif#ifndef _WIN32#define _isnan isnan#define _finite finite#endifmat3::mat3(){}mat3::mat3(const nv_scalar* array){    memcpy(mat_array, array, sizeof(nv_scalar) * 9);}mat3::mat3(const mat3 & M){    memcpy(mat_array, M.mat_array, sizeof(nv_scalar) * 9);}mat4::mat4(){}mat4::mat4(const nv_scalar* array){    memcpy(mat_array, array, sizeof(nv_scalar) * 16);}mat4::mat4(const mat4& M){    memcpy(mat_array, M.mat_array, sizeof(nv_scalar) * 16);}vec3 & cross(vec3 & u, const vec3 & v, const vec3 & w){    u.x = v.y*w.z - v.z*w.y;    u.y = v.z*w.x - v.x*w.z;    u.z = v.x*w.y - v.y*w.x;    return u;}nv_scalar & dot(nv_scalar& u, const vec3& v, const vec3& w){    u = v.x*w.x + v.y*w.y + v.z*w.z;    return u;}nv_scalar dot(const vec3& v, const vec3& w){    return v.x*w.x + v.y*w.y + v.z*w.z;}nv_scalar & dot(nv_scalar& u, const vec4& v, const vec4& w){    u = v.x*w.x + v.y*w.y + v.z*w.z + v.w*w.w;    return u;}nv_scalar dot(const vec4& v, const vec4& w){    return v.x*w.x + v.y*w.y + v.z*w.z + v.w*w.w;}nv_scalar & dot(nv_scalar& u, const vec3& v, const vec4& w){    u = v.x*w.x + v.y*w.y + v.z*w.z;    return u;}nv_scalar dot(const vec3& v, const vec4& w){    return v.x*w.x + v.y*w.y + v.z*w.z;}nv_scalar & dot(nv_scalar& u, const vec4& v, const vec3& w){    u = v.x*w.x + v.y*w.y + v.z*w.z;    return u;}nv_scalar dot(const vec4& v, const vec3& w){    return v.x*w.x + v.y*w.y + v.z*w.z;}vec3 & reflect(vec3& r, const vec3& n, const vec3& l){    nv_scalar n_dot_l;    n_dot_l = nv_two * dot(n_dot_l,n,l);    mult(r,l,-nv_one);    madd(r,n,n_dot_l);    return r;}vec3 & madd(vec3 & u, const vec3& v, const nv_scalar& lambda){    u.x += v.x*lambda;    u.y += v.y*lambda;    u.z += v.z*lambda;    return u;}vec3 & mult(vec3 & u, const vec3& v, const nv_scalar& lambda){    u.x = v.x*lambda;    u.y = v.y*lambda;    u.z = v.z*lambda;    return u;}vec3 & mult(vec3 & u, const vec3& v, const vec3& w){    u.x = v.x*w.x;    u.y = v.y*w.y;    u.z = v.z*w.z;    return u;}vec3 & sub(vec3 & u, const vec3& v, const vec3& w){    u.x = v.x - w.x;    u.y = v.y - w.y;    u.z = v.z - w.z;    return u;}vec3 & add(vec3 & u, const vec3& v, const vec3& w){    u.x = v.x + w.x;    u.y = v.y + w.y;    u.z = v.z + w.z;    return u;}nv_scalar vec3::normalize(){	nv_scalar norm = sqrtf(x * x + y * y + z * z);	if (norm > nv_eps)		norm = nv_one / norm;	else		norm = nv_zero;	x *= norm;	y *= norm;	z *= norm;	return norm;}vec3 & scale(vec3& u, const nv_scalar s){    u.x *= s;    u.y *= s;    u.z *= s;    return u;}vec4 & scale(vec4& u, const nv_scalar s){    u.x *= s;    u.y *= s;    u.z *= s;    u.w *= s;    return u;}vec3 & mult(vec3& u, const mat3& M, const vec3& v){    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z;    return u;}vec3 & mult(vec3& u, const vec3& v, const mat3& M){    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z;    return u;}const vec3 operator*(const mat3& M, const vec3& v){	vec3 u;    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z;    return u;}const vec3 operator*(const vec3& v, const mat3& M){	vec3 u;    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z;    return u;}vec4 & mult(vec4& u, const mat4& M, const vec4& v){    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z + M.a03 * v.w;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z + M.a13 * v.w;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z + M.a23 * v.w;    u.w = M.a30 * v.x + M.a31 * v.y + M.a32 * v.z + M.a33 * v.w;    return u;}vec4 & mult(vec4& u, const vec4& v, const mat4& M){    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z + M.a30 * v.w;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z + M.a31 * v.w;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z + M.a32 * v.w;    u.w = M.a03 * v.x + M.a13 * v.y + M.a23 * v.z + M.a33 * v.w;    return u;}const vec4 operator*(const mat4& M, const vec4& v){	vec4 u;    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z + M.a03 * v.w;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z + M.a13 * v.w;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z + M.a23 * v.w;    u.w = M.a30 * v.x + M.a31 * v.y + M.a32 * v.z + M.a33 * v.w;    return u;}const vec4 operator*(const vec4& v, const mat4& M){	vec4 u;    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z + M.a30 * v.w;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z + M.a31 * v.w;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z + M.a32 * v.w;    u.w = M.a03 * v.x + M.a13 * v.y + M.a23 * v.z + M.a33 * v.w;    return u;}vec3 & mult_pos(vec3& u, const mat4& M, const vec3& v){    nv_scalar oow = nv_one / (v.x * M.a30 + v.y * M.a31 + v.z * M.a32 + M.a33);    u.x = (M.a00 * v.x + M.a01 * v.y + M.a02 * v.z + M.a03) * oow;    u.y = (M.a10 * v.x + M.a11 * v.y + M.a12 * v.z + M.a13) * oow;    u.z = (M.a20 * v.x + M.a21 * v.y + M.a22 * v.z + M.a23) * oow;    return u;}vec3 & mult_pos(vec3& u, const vec3& v, const mat4& M){    nv_scalar oow = nv_one / (v.x * M.a03 + v.y * M.a13 + v.z * M.a23 + M.a33);    u.x = (M.a00 * v.x + M.a10 * v.y + M.a20 * v.z + M.a30) * oow;    u.y = (M.a01 * v.x + M.a11 * v.y + M.a21 * v.z + M.a31) * oow;    u.z = (M.a02 * v.x + M.a12 * v.y + M.a22 * v.z + M.a32) * oow;    return u;}vec3 & mult_dir(vec3& u, const mat4& M, const vec3& v){    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z;    return u;}vec3 & mult_dir(vec3& u, const vec3& v, const mat4& M){    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z;    return u;}vec3 & mult(vec3& u, const mat4& M, const vec3& v){    u.x = M.a00 * v.x + M.a01 * v.y + M.a02 * v.z + M.a03;    u.y = M.a10 * v.x + M.a11 * v.y + M.a12 * v.z + M.a13;    u.z = M.a20 * v.x + M.a21 * v.y + M.a22 * v.z + M.a23;    return u;}vec3 & mult(vec3& u, const vec3& v, const mat4& M){    u.x = M.a00 * v.x + M.a10 * v.y + M.a20 * v.z + M.a30;    u.y = M.a01 * v.x + M.a11 * v.y + M.a21 * v.z + M.a31;    u.z = M.a02 * v.x + M.a12 * v.y + M.a22 * v.z + M.a32;    return u;}mat4 & add(mat4& A, const mat4& B){    A.a00 += B.a00;    A.a10 += B.a10;    A.a20 += B.a20;    A.a30 += B.a30;    A.a01 += B.a01;    A.a11 += B.a11;    A.a21 += B.a21;    A.a31 += B.a31;    A.a02 += B.a02;    A.a12 += B.a12;    A.a22 += B.a22;    A.a32 += B.a32;    A.a03 += B.a03;    A.a13 += B.a13;    A.a23 += B.a23;    A.a33 += B.a33;    return A;}mat3 & add(mat3& A, const mat3& B){    A.a00 += B.a00;    A.a10 += B.a10;    A.a20 += B.a20;    A.a01 += B.a01;    A.a11 += B.a11;    A.a21 += B.a21;    A.a02 += B.a02;    A.a12 += B.a12;    A.a22 += B.a22;    return A;}// C = A * B// C.a00 C.a01 C.a02 C.a03   A.a00 A.a01 A.a02 A.a03   B.a00 B.a01 B.a02 B.a03//                                                                            // C.a10 C.a11 C.a12 C.a13   A.a10 A.a11 A.a12 A.a13   B.a10 B.a11 B.a12 B.a13//                                                                         // C.a20 C.a21 C.a22 C.a23   A.a20 A.a21 A.a22 A.a23   B.a20 B.a21 B.a22 B.a23  //                                                                            // C.a30 C.a31 C.a32 C.a33 = A.a30 A.a31 A.a32 A.a33 * B.a30 B.a31 B.a32 B.a33mat4 & mult(mat4& C, const mat4& A, const mat4& B){    C.a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20 + A.a03 * B.a30;    C.a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20 + A.a13 * B.a30;    C.a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20 + A.a23 * B.a30;    C.a30 = A.a30 * B.a00 + A.a31 * B.a10 + A.a32 * B.a20 + A.a33 * B.a30;    C.a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21 + A.a03 * B.a31;    C.a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21 + A.a13 * B.a31;    C.a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21 + A.a23 * B.a31;    C.a31 = A.a30 * B.a01 + A.a31 * B.a11 + A.a32 * B.a21 + A.a33 * B.a31;    C.a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22 + A.a03 * B.a32;    C.a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22 + A.a13 * B.a32;    C.a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22 + A.a23 * B.a32;    C.a32 = A.a30 * B.a02 + A.a31 * B.a12 + A.a32 * B.a22 + A.a33 * B.a32;    C.a03 = A.a00 * B.a03 + A.a01 * B.a13 + A.a02 * B.a23 + A.a03 * B.a33;    C.a13 = A.a10 * B.a03 + A.a11 * B.a13 + A.a12 * B.a23 + A.a13 * B.a33;    C.a23 = A.a20 * B.a03 + A.a21 * B.a13 + A.a22 * B.a23 + A.a23 * B.a33;    C.a33 = A.a30 * B.a03 + A.a31 * B.a13 + A.a32 * B.a23 + A.a33 * B.a33;    return C;}mat4 mat4::operator*(const mat4& B) const{    mat4 C;    C.a00 = a00 * B.a00 + a01 * B.a10 + a02 * B.a20 + a03 * B.a30;    C.a10 = a10 * B.a00 + a11 * B.a10 + a12 * B.a20 + a13 * B.a30;    C.a20 = a20 * B.a00 + a21 * B.a10 + a22 * B.a20 + a23 * B.a30;    C.a30 = a30 * B.a00 + a31 * B.a10 + a32 * B.a20 + a33 * B.a30;    C.a01 = a00 * B.a01 + a01 * B.a11 + a02 * B.a21 + a03 * B.a31;    C.a11 = a10 * B.a01 + a11 * B.a11 + a12 * B.a21 + a13 * B.a31;    C.a21 = a20 * B.a01 + a21 * B.a11 + a22 * B.a21 + a23 * B.a31;    C.a31 = a30 * B.a01 + a31 * B.a11 + a32 * B.a21 + a33 * B.a31;    C.a02 = a00 * B.a02 + a01 * B.a12 + a02 * B.a22 + a03 * B.a32;    C.a12 = a10 * B.a02 + a11 * B.a12 + a12 * B.a22 + a13 * B.a32;    C.a22 = a20 * B.a02 + a21 * B.a12 + a22 * B.a22 + a23 * B.a32;    C.a32 = a30 * B.a02 + a31 * B.a12 + a32 * B.a22 + a33 * B.a32;    C.a03 = a00 * B.a03 + a01 * B.a13 + a02 * B.a23 + a03 * B.a33;    C.a13 = a10 * B.a03 + a11 * B.a13 + a12 * B.a23 + a13 * B.a33;    C.a23 = a20 * B.a03 + a21 * B.a13 + a22 * B.a23 + a23 * B.a33;    C.a33 = a30 * B.a03 + a31 * B.a13 + a32 * B.a23 + a33 * B.a33;    return C;}// C = A * B// C.a00 C.a01 C.a02   A.a00 A.a01 A.a02   B.a00 B.a01 B.a02//                                                          // C.a10 C.a11 C.a12   A.a10 A.a11 A.a12   B.a10 B.a11 B.a12//                                                          // C.a20 C.a21 C.a22 = A.a20 A.a21 A.a22 * B.a20 B.a21 B.a22mat3 & mult(mat3& C, const mat3& A, const mat3& B){    C.a00 = A.a00 * B.a00 + A.a01 * B.a10 + A.a02 * B.a20;    C.a10 = A.a10 * B.a00 + A.a11 * B.a10 + A.a12 * B.a20;    C.a20 = A.a20 * B.a00 + A.a21 * B.a10 + A.a22 * B.a20;    C.a01 = A.a00 * B.a01 + A.a01 * B.a11 + A.a02 * B.a21;    C.a11 = A.a10 * B.a01 + A.a11 * B.a11 + A.a12 * B.a21;    C.a21 = A.a20 * B.a01 + A.a21 * B.a11 + A.a22 * B.a21;    C.a02 = A.a00 * B.a02 + A.a01 * B.a12 + A.a02 * B.a22;    C.a12 = A.a10 * B.a02 + A.a11 * B.a12 + A.a12 * B.a22;    C.a22 = A.a20 * B.a02 + A.a21 * B.a12 + A.a22 * B.a22;    return C;}mat3 & transpose(mat3& A){    nv_scalar tmp;    tmp = A.a01;    A.a01 = A.a10;    A.a10 = tmp;    tmp = A.a02;    A.a02 = A.a20;    A.a20 = tmp;    tmp = A.a12;    A.a12 = A.a21;    A.a21 = tmp;    return A;}mat4 & transpose(mat4& A){    nv_scalar tmp;    tmp = A.a01;    A.a01 = A.a10;    A.a10 = tmp;    tmp = A.a02;    A.a02 = A.a20;    A.a20 = tmp;    tmp = A.a03;    A.a03 = A.a30;    A.a30 = tmp;    tmp = A.a12;    A.a12 = A.a21;    A.a21 = tmp;    tmp = A.a13;    A.a13 = A.a31;    A.a31 = tmp;    tmp = A.a23;    A.a23 = A.a32;    A.a32 = tmp;    return A;}mat4 & transpose(mat4& B, const mat4& A){    B.a00 = A.a00;    B.a01 = A.a10;    B.a02 = A.a20;    B.a03 = A.a30;    B.a10 = A.a01;    B.a11 = A.a11;    B.a12 = A.a21;    B.a13 = A.a31;    B.a20 = A.a02;    B.a21 = A.a12;    B.a22 = A.a22;    B.a23 = A.a32;    B.a30 = A.a03;    B.a31 = A.a13;    B.a32 = A.a23;    B.a33 = A.a33;    return B;}mat3 & transpose(mat3& B, const mat3& A){    B.a00 = A.a00;    B.a01 = A.a10;    B.a02 = A.a20;    B.a10 = A.a01;    B.a11 = A.a11;    B.a12 = A.a21;

⌨️ 快捷键说明

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