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

📄 vec.h

📁 [Game.Programming].Academic - Graphics Gems (6 books source code)
💻 H
📖 第 1 页 / 共 3 页
字号:
		 ((v)[1]-(w)[1])*((v)[1]-(w)[1]) + \		 ((v)[2]-(w)[2])*((v)[2]-(w)[2]) + \		 ((v)[3]-(w)[3])*((v)[3]-(w)[3]))#define _DOTcol4(v,m,j)	\		((v)[0] * (m)[0][j] + \		 (v)[1] * (m)[1][j] + \		 (v)[2] * (m)[2][j] + \		 (v)[3] * (m)[3][j])#define _SETcol4(v,m,j)	\		((v)[0] = (m)[0][j], \		 (v)[1] = (m)[1][j], \		 (v)[2] = (m)[2][j], \		 (v)[3] = (m)[3][j])#define _MXVcol4(to,m,M,j)	\		((to)[0][j] = _DOTcol4((m)[0],M,j), \		 (to)[1][j] = _DOTcol4((m)[1],M,j), \		 (to)[2][j] = _DOTcol4((m)[2],M,j), \		 (to)[3][j] = _DOTcol4((m)[3],M,j))#define _DET4(v0,v1,v2,v3,i0,i1,i2,i3)	\		((v0)[i0]* _DET3(v1,v2,v3,i1,i2,i3) + \		 (v0)[i1]*-_DET3(v1,v2,v3,i0,i2,i3) + \		 (v0)[i2]* _DET3(v1,v2,v3,i0,i1,i3) + \		 (v0)[i3]*-_DET3(v1,v2,v3,i0,i1,i2))#define VXVXV4(to,v1,v2,v3)	\		((to)[0] = -_DET3(v1,v2,v3, 1,2,3), \		 (to)[1] =  _DET3(v1,v2,v3, 0,2,3), \		 (to)[2] = -_DET3(v1,v2,v3, 0,1,3), \		 (to)[3] =  _DET3(v1,v2,v3, 0,1,2))#define SET4from3(to,from,pad)	\		((to)[0] = (from)[0], \		 (to)[1] = (from)[1], \		 (to)[2] = (from)[2], \		 (to)[3] = (pad))#define SETMAT4from3(to,from,pad0,pad1)	\		(SET4from3((to)[0], (from)[0], pad0), \		 SET4from3((to)[1], (from)[1], pad0), \		 SET4from3((to)[2], (from)[2], pad0), \		 FILLVEC3((to)[3], (pad0)), (to)[3][3] = (pad1))#define M3XM4(to4,m3,m4)	\		(_MXVcol3(to4,m3,m4,0), (to4)[3][0]=(m4)[3][0], \		 _MXVcol3(to4,m3,m4,1), (to4)[3][1]=(m4)[3][1], \		 _MXVcol3(to4,m3,m4,2), (to4)[3][2]=(m4)[3][2], \		 _MXVcol3(to4,m3,m4,3), (to4)[3][3]=(m4)[3][3])#define M4XM3(to4,m4,m3)	\		(VXM3((to4)[0],(m4)[0],m3), (to4)[0][3]=(m4)[0][3], \		 VXM3((to4)[1],(m4)[1],m3), (to4)[1][3]=(m4)[1][3], \		 VXM3((to4)[2],(m4)[2],m3), (to4)[2][3]=(m4)[2][3], \		 VXM3((to4)[3],(m4)[3],m3), (to4)[3][3]=(m4)[3][3])#define VXVXVXV4(v0,v1,v2,v3)	\		(_DET4(v0,v1,v2,v3,0,1,2,3))#define DET4(m)	\		(VXVXVXV4((m)[0],(m)[1],(m)[2],(m)[3]))#define ADJOINT4(to,m)	\		( _ADJOINTcol4(to,0,m,1,2,3), \		 __ADJOINTcol4(to,1,m,0,2,3), \		  _ADJOINTcol4(to,2,m,0,1,3), \		 __ADJOINTcol4(to,3,m,0,1,2))#define _ADJOINTcol4(to,col,m,i1,i2,i3)	\		((to)[0][col] =  _DET3(m[i1],m[i2],m[i3], 1,2,3), \		 (to)[1][col] = -_DET3(m[i1],m[i2],m[i3], 0,2,3), \		 (to)[2][col] =  _DET3(m[i1],m[i2],m[i3], 0,1,3), \		 (to)[3][col] = -_DET3(m[i1],m[i2],m[i3], 0,1,2))#define __ADJOINTcol4(to,col,m,i1,i2,i3)	\		((to)[0][col] = -_DET3(m[i1],m[i2],m[i3], 1,2,3), \		 (to)[1][col] =  _DET3(m[i1],m[i2],m[i3], 0,2,3), \		 (to)[2][col] = -_DET3(m[i1],m[i2],m[i3], 0,1,3), \		 (to)[3][col] =  _DET3(m[i1],m[i2],m[i3], 0,1,2))#define TRANSPOSE2safe(type,to,from) \		do {type _vec_h_temp_[2][2]; \		    TRANSPOSE2(_vec_h_temp_,from); \		    SETMAT2(to, _vec_h_temp_); \		} while (0)#define TRANSPOSE2d(to,from) TRANSPOSE2safe(double,to,from)#define TRANSPOSE2i(to,from) TRANSPOSE2safe(int,to,from)#define TRANSPOSE2l(to,from) TRANSPOSE2safe(long,to,from)#define TRANSPOSE2r(to,from) TRANSPOSE2safe(real,to,from)#define MXM2safe(type,to,m1,m2) \		do {type _vec_h_temp_[2][2]; \		    MXM2(_vec_h_temp_,m1,m2); \		    SETMAT2(to, _vec_h_temp_); \		} while (0)#define MXM2d(to,m1,m2) MXM2safe(double,to,m1,m2)#define MXM2i(to,m1,m2) MXM2safe(int,to,m1,m2)#define MXM2l(to,m1,m2) MXM2safe(long,to,m1,m2)#define MXM2r(to,m1,m2) MXM2safe(real,to,m1,m2)#define VXM2safe(type,to,v,m) \		do {type _vec_h_temp_[2]; \		    VXM2(_vec_h_temp_,v,m); \		    SET2(to, _vec_h_temp_); \		} while (0)#define VXM2d(to,v,m) VXM2safe(double,to,v,m)#define VXM2i(to,v,m) VXM2safe(int,to,v,m)#define VXM2l(to,v,m) VXM2safe(long,to,v,m)#define VXM2r(to,v,m) VXM2safe(real,to,v,m)#define MXV2safe(type,to,m,v) \		do {type _vec_h_temp_[2]; \		    MXV2(_vec_h_temp_,m,v); \		    SET2(to, _vec_h_temp_); \		} while (0)#define MXV2d(to,m,v) MXV2safe(double,to,m,v)#define MXV2i(to,m,v) MXV2safe(int,to,m,v)#define MXV2l(to,m,v) MXV2safe(long,to,m,v)#define MXV2r(to,m,v) MXV2safe(real,to,m,v)#define XV2safe(type,to,v1) \		do {type _vec_h_temp_[2]; \		    XV2(_vec_h_temp_,v1); \		    SET2(to, _vec_h_temp_); \		} while (0)#define XV2d(to,v1) XV2safe(double,to,v1)#define XV2i(to,v1) XV2safe(int,to,v1)#define XV2l(to,v1) XV2safe(long,to,v1)#define XV2r(to,v1) XV2safe(real,to,v1)#define V2XM3safe(type,to2,v2,m3) \		do {type _vec_h_temp_[2]; \		    V2XM3(_vec_h_temp_,v2,m3); \		    SET2(to2, _vec_h_temp_); \		} while (0)#define V2XM3d(to2,v2,m3) V2XM3safe(double,to2,v2,m3)#define V2XM3i(to2,v2,m3) V2XM3safe(int,to2,v2,m3)#define V2XM3l(to2,v2,m3) V2XM3safe(long,to2,v2,m3)#define V2XM3r(to2,v2,m3) V2XM3safe(real,to2,v2,m3)#define M3XV2safe(type,to2,m3,v2) \		do {type _vec_h_temp_[2]; \		    M3XV2(_vec_h_temp_,m3,v2); \		    SET2(to2, _vec_h_temp_); \		} while (0)#define M3XV2d(to2,m3,v2) M3XV2safe(double,to2,m3,v2)#define M3XV2i(to2,m3,v2) M3XV2safe(int,to2,m3,v2)#define M3XV2l(to2,m3,v2) M3XV2safe(long,to2,m3,v2)#define M3XV2r(to2,m3,v2) M3XV2safe(real,to2,m3,v2)#define ADJOINT2safe(type,to,m) \		do {type _vec_h_temp_[2][2]; \		    ADJOINT2(_vec_h_temp_,m); \		    SETMAT2(to, _vec_h_temp_); \		} while (0)#define ADJOINT2d(to,m) ADJOINT2safe(double,to,m)#define ADJOINT2i(to,m) ADJOINT2safe(int,to,m)#define ADJOINT2l(to,m) ADJOINT2safe(long,to,m)#define ADJOINT2r(to,m) ADJOINT2safe(real,to,m)#define TRANSPOSE3safe(type,to,from) \		do {type _vec_h_temp_[3][3]; \		    TRANSPOSE3(_vec_h_temp_,from); \		    SETMAT3(to, _vec_h_temp_); \		} while (0)#define TRANSPOSE3d(to,from) TRANSPOSE3safe(double,to,from)#define TRANSPOSE3i(to,from) TRANSPOSE3safe(int,to,from)#define TRANSPOSE3l(to,from) TRANSPOSE3safe(long,to,from)#define TRANSPOSE3r(to,from) TRANSPOSE3safe(real,to,from)#define MXM3safe(type,to,m1,m2) \		do {type _vec_h_temp_[3][3]; \		    MXM3(_vec_h_temp_,m1,m2); \		    SETMAT3(to, _vec_h_temp_); \		} while (0)#define MXM3d(to,m1,m2) MXM3safe(double,to,m1,m2)#define MXM3i(to,m1,m2) MXM3safe(int,to,m1,m2)#define MXM3l(to,m1,m2) MXM3safe(long,to,m1,m2)#define MXM3r(to,m1,m2) MXM3safe(real,to,m1,m2)#define VXM3safe(type,to,v,m) \		do {type _vec_h_temp_[3]; \		    VXM3(_vec_h_temp_,v,m); \		    SET3(to, _vec_h_temp_); \		} while (0)#define VXM3d(to,v,m) VXM3safe(double,to,v,m)#define VXM3i(to,v,m) VXM3safe(int,to,v,m)#define VXM3l(to,v,m) VXM3safe(long,to,v,m)#define VXM3r(to,v,m) VXM3safe(real,to,v,m)#define MXV3safe(type,to,m,v) \		do {type _vec_h_temp_[3]; \		    MXV3(_vec_h_temp_,m,v); \		    SET3(to, _vec_h_temp_); \		} while (0)#define MXV3d(to,m,v) MXV3safe(double,to,m,v)#define MXV3i(to,m,v) MXV3safe(int,to,m,v)#define MXV3l(to,m,v) MXV3safe(long,to,m,v)#define MXV3r(to,m,v) MXV3safe(real,to,m,v)#define VXV3safe(type,to,v1,v2) \		do {type _vec_h_temp_[3]; \		    VXV3(_vec_h_temp_,v1,v2); \		    SET3(to, _vec_h_temp_); \		} while (0)#define VXV3d(to,v1,v2) VXV3safe(double,to,v1,v2)#define VXV3i(to,v1,v2) VXV3safe(int,to,v1,v2)#define VXV3l(to,v1,v2) VXV3safe(long,to,v1,v2)#define VXV3r(to,v1,v2) VXV3safe(real,to,v1,v2)#define M2XM3safe(type,to3,m2,m3) \		do {type _vec_h_temp_[3][3]; \		    M2XM3(_vec_h_temp_,m2,m3); \		    SETMAT3(to3, _vec_h_temp_); \		} while (0)#define M2XM3d(to3,m2,m3) M2XM3safe(double,to3,m2,m3)#define M2XM3i(to3,m2,m3) M2XM3safe(int,to3,m2,m3)#define M2XM3l(to3,m2,m3) M2XM3safe(long,to3,m2,m3)#define M2XM3r(to3,m2,m3) M2XM3safe(real,to3,m2,m3)#define M3XM2safe(type,to3,m3,m2) \		do {type _vec_h_temp_[3][3]; \		    M3XM2(_vec_h_temp_,m3,m2); \		    SETMAT3(to3, _vec_h_temp_); \		} while (0)#define M3XM2d(to3,m3,m2) M3XM2safe(double,to3,m3,m2)#define M3XM2i(to3,m3,m2) M3XM2safe(int,to3,m3,m2)#define M3XM2l(to3,m3,m2) M3XM2safe(long,to3,m3,m2)#define M3XM2r(to3,m3,m2) M3XM2safe(real,to3,m3,m2)#define V3XM4safe(type,to3,v3,m4) \		do {type _vec_h_temp_[3]; \		    V3XM4(_vec_h_temp_,v3,m4); \		    SET3(to3, _vec_h_temp_); \		} while (0)#define V3XM4d(to3,v3,m4) V3XM4safe(double,to3,v3,m4)#define V3XM4i(to3,v3,m4) V3XM4safe(int,to3,v3,m4)#define V3XM4l(to3,v3,m4) V3XM4safe(long,to3,v3,m4)#define V3XM4r(to3,v3,m4) V3XM4safe(real,to3,v3,m4)#define M4XV3safe(type,to3,m4,v3) \		do {type _vec_h_temp_[3]; \		    M4XV3(_vec_h_temp_,m4,v3); \		    SET3(to3, _vec_h_temp_); \		} while (0)#define M4XV3d(to3,m4,v3) M4XV3safe(double,to3,m4,v3)#define M4XV3i(to3,m4,v3) M4XV3safe(int,to3,m4,v3)#define M4XV3l(to3,m4,v3) M4XV3safe(long,to3,m4,v3)#define M4XV3r(to3,m4,v3) M4XV3safe(real,to3,m4,v3)#define ADJOINT3safe(type,to,m) \		do {type _vec_h_temp_[3][3]; \		    ADJOINT3(_vec_h_temp_,m); \		    SETMAT3(to, _vec_h_temp_); \		} while (0)#define ADJOINT3d(to,m) ADJOINT3safe(double,to,m)#define ADJOINT3i(to,m) ADJOINT3safe(int,to,m)#define ADJOINT3l(to,m) ADJOINT3safe(long,to,m)#define ADJOINT3r(to,m) ADJOINT3safe(real,to,m)#define TRANSPOSE4safe(type,to,from) \		do {type _vec_h_temp_[4][4]; \		    TRANSPOSE4(_vec_h_temp_,from); \		    SETMAT4(to, _vec_h_temp_); \		} while (0)#define TRANSPOSE4d(to,from) TRANSPOSE4safe(double,to,from)#define TRANSPOSE4i(to,from) TRANSPOSE4safe(int,to,from)#define TRANSPOSE4l(to,from) TRANSPOSE4safe(long,to,from)#define TRANSPOSE4r(to,from) TRANSPOSE4safe(real,to,from)#define MXM4safe(type,to,m1,m2) \		do {type _vec_h_temp_[4][4]; \		    MXM4(_vec_h_temp_,m1,m2); \		    SETMAT4(to, _vec_h_temp_); \		} while (0)#define MXM4d(to,m1,m2) MXM4safe(double,to,m1,m2)#define MXM4i(to,m1,m2) MXM4safe(int,to,m1,m2)#define MXM4l(to,m1,m2) MXM4safe(long,to,m1,m2)#define MXM4r(to,m1,m2) MXM4safe(real,to,m1,m2)#define VXM4safe(type,to,v,m) \		do {type _vec_h_temp_[4]; \		    VXM4(_vec_h_temp_,v,m); \		    SET4(to, _vec_h_temp_); \		} while (0)#define VXM4d(to,v,m) VXM4safe(double,to,v,m)#define VXM4i(to,v,m) VXM4safe(int,to,v,m)#define VXM4l(to,v,m) VXM4safe(long,to,v,m)#define VXM4r(to,v,m) VXM4safe(real,to,v,m)#define MXV4safe(type,to,m,v) \		do {type _vec_h_temp_[4]; \		    MXV4(_vec_h_temp_,m,v); \		    SET4(to, _vec_h_temp_); \		} while (0)#define MXV4d(to,m,v) MXV4safe(double,to,m,v)#define MXV4i(to,m,v) MXV4safe(int,to,m,v)#define MXV4l(to,m,v) MXV4safe(long,to,m,v)#define MXV4r(to,m,v) MXV4safe(real,to,m,v)#define VXVXV4safe(type,to,v1,v2,v3) \		do {type _vec_h_temp_[4]; \		    VXVXV4(_vec_h_temp_,v1,v2,v3); \		    SET4(to, _vec_h_temp_); \		} while (0)#define VXVXV4d(to,v1,v2,v3) VXVXV4safe(double,to,v1,v2,v3)#define VXVXV4i(to,v1,v2,v3) VXVXV4safe(int,to,v1,v2,v3)#define VXVXV4l(to,v1,v2,v3) VXVXV4safe(long,to,v1,v2,v3)#define VXVXV4r(to,v1,v2,v3) VXVXV4safe(real,to,v1,v2,v3)#define M3XM4safe(type,to4,m3,m4) \		do {type _vec_h_temp_[4][4]; \		    M3XM4(_vec_h_temp_,m3,m4); \		    SETMAT4(to4, _vec_h_temp_); \		} while (0)#define M3XM4d(to4,m3,m4) M3XM4safe(double,to4,m3,m4)#define M3XM4i(to4,m3,m4) M3XM4safe(int,to4,m3,m4)#define M3XM4l(to4,m3,m4) M3XM4safe(long,to4,m3,m4)#define M3XM4r(to4,m3,m4) M3XM4safe(real,to4,m3,m4)#define M4XM3safe(type,to4,m4,m3) \		do {type _vec_h_temp_[4][4]; \		    M4XM3(_vec_h_temp_,m4,m3); \		    SETMAT4(to4, _vec_h_temp_); \		} while (0)#define M4XM3d(to4,m4,m3) M4XM3safe(double,to4,m4,m3)#define M4XM3i(to4,m4,m3) M4XM3safe(int,to4,m4,m3)#define M4XM3l(to4,m4,m3) M4XM3safe(long,to4,m4,m3)#define M4XM3r(to4,m4,m3) M4XM3safe(real,to4,m4,m3)#define ADJOINT4safe(type,to,m) \		do {type _vec_h_temp_[4][4]; \		    ADJOINT4(_vec_h_temp_,m); \		    SETMAT4(to, _vec_h_temp_); \		} while (0)#define ADJOINT4d(to,m) ADJOINT4safe(double,to,m)#define ADJOINT4i(to,m) ADJOINT4safe(int,to,m)#define ADJOINT4l(to,m) ADJOINT4safe(long,to,m)#define ADJOINT4r(to,m) ADJOINT4safe(real,to,m)#endif /* VEC_H */

⌨️ 快捷键说明

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