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

📄 mat2.h

📁 This contains Graphic gems code
💻 H
字号:
/* ------------------------------------------------------------------------- *\   MAT2.H :   Definition and manipulation of a 2D matrix (either integers or reals)   by Christophe Schlick (1 June 1992)\* ------------------------------------------------------------------------- */#ifndef _MAT2_#define _MAT2_#include "tool.h"#include "vec2.h"/*** Creation, duplication, swapping*/#define MAKE_MAT2(M,A,B)\        (COPY_VEC2 ((M)[0],(A)),\         COPY_VEC2 ((M)[1],(B)))#define COPY_MAT2(M,A)\        (COPY_VEC2 ((M)[0],(A)[0]),\         COPY_VEC2 ((M)[1],(A)[1]))#define SWAP_MAT2(A,B,t)\        (SWAP_VEC2 ((A)[0], (B)[0], t),\         SWAP_VEC2 ((A)[1], (B)[1], t))/*** Addition, subtraction, multiplication, division (by a matrix element)*/#define INC_MAT2(M,A)\        (INC_VEC2 ((M)[0],(A)[0]),\         INC_VEC2 ((M)[1],(A)[1]))#define DEC_MAT2(M,A)\        (DEC_VEC2 ((M)[0],(A)[0]),\         DEC_VEC2 ((M)[1],(A)[1]))#define ADD_MAT2(M,A,B)\        (ADD_VEC2 ((M)[0],(A)[0],(B)[0]),\         ADD_VEC2 ((M)[1],(A)[1],(B)[1]))#define SUB_MAT2(M,A,B)\        (SUB_VEC2 ((M)[0],(A)[0],(B)[0]),\         SUB_VEC2 ((M)[1],(A)[1],(B)[1]))#define MUL_MAT2(M,A,B)\        (MUL_VEC2 ((M)[0],(A)[0],(B)[0]),\         MUL_VEC2 ((M)[1],(A)[1],(B)[1]))#define DIV_MAT2(M,A,B)\        (DIV_VEC2 ((M)[0],(A)[0],(B)[0]),\         DIV_VEC2 ((M)[1],(A)[1],(B)[1]))/*** Addition, subtraction, multiplication, division (by a scalar element)*/#define ADDS_MAT2(M,A,s)\        (ADDS_VEC2 ((M)[0],(A)[0],s),\         ADDS_VEC2 ((M)[1],(A)[1],s))  #define SUBS_MAT2(M,A,B)\        (SUBS_VEC2 ((M)[0],(A)[0],s),\         SUBS_VEC2 ((M)[1],(A)[1],s))#define MULS_MAT2(M,A,B)\        (MULS_VEC2 ((M)[0],(A)[0],s),\         MULS_VEC2 ((M)[1],(A)[1],s))#define DIVS_MAT2(M,A,B)\        (DIVS_VEC2 ((M)[0],(A)[0],s),\         DIVS_VEC2 ((M)[1],(A)[1],s))/*** Determinant, transposition, adjunction, inversion*/#define DELTA_MAT2(M)\        (DELTA_VEC2 ((M)[0],(M)[1]))#define TRANS_MAT2(M,A)\        ((M)[0].x = (A)[0].x, (M)[0].y = (A)[1].x,\         (M)[1].x = (A)[0].y, (M)[1].y = (A)[1].y)  #define ADJ_MAT2(M,A)\        ((M)[0].x = (A)[1].y, (M)[0].y = -(A)[0].y,\         (M)[1].x = -(A)[1].x, (M)[1].y = (A)[0].x)#define INV_MAT2(M,A,s)\        (ADJ_MAT2 (M,A), (s) = DOT_VEC2 ((M)[0],(A)[0]),\         ZERO (s) ? (DIVS_MAT2 (M,M,s), TRUE) : FALSE)/*** Matrix product, left vector product, right vector product*/#define ROW_VEC2(V,M,n)\        ((V).x*(M)[0].n + (V).y*(M)[1].n)#define PROD_MAT2(M,A,B)\        ((M)[0].x = ROW_VEC2 ((A)[0],(B),x),\         (M)[0].y = ROW_VEC2 ((A)[0],(B),y),\         (M)[1].x = ROW_VEC2 ((A)[1],(B),x),\         (M)[1].y = ROW_VEC2 ((A)[1],(B),y))#define LMAT_VEC2(V,A,M)\        ((V).x = ROW_VEC2 ((A),(M),x),\         (V).y = ROW_VEC2 ((A),(M),y))#define RMAT_VEC2(V,M,A)\        ((V).x = DOT_VEC2 ((A),(M)[0]),\         (V).y = DOT_VEC2 ((A),(M)[1]))/*** MAKE_FRAME2(F,O,A,B,s) = Create a local frame F where O is the origin,**                          (A,B) are the axis and 's' a dummy real variable** LOCAL_FRAME2(V,F,A) = Transform A from world frame into local frame F** WORLD_FRAME2(V,F,A) = Transform A from local frame F into world frame*/#define MAKE_FRAME2(F,O,A,B,s)\        (COPY_VEC2 ((F)[0],(A)),\         COPY_VEC2 ((F)[1],(B)),\         COPY_VEC2 ((F)[2],(O)),\	 INV_MAT2 ((F)+6,(F),s))#define LOCAL_FRAME2(V,F,A)\        (DEC_VEC2 ((A),(F)[2]),\         LMAT_VEC2 ((V),(A),(F)+6),\         INC_VEC2 ((A),(F)[2]))#define WORLD_FRAME2(V,F,A)\        (LMAT_VEC2 ((V),(A),(F)),\         INC_VEC2 ((V),(F)[2]))#endif/* ------------------------------------------------------------------------- */

⌨️ 快捷键说明

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