📄 matrix.c.svn-base
字号:
#include "matrix.h"long getX( matrix,x, y)Matrix *matrix;long x;long y;{ //printf("ScaleX is %f RotateSkew0 is %f translatex is %ld\n",matrix->ScaleX,matrix->RotateSkew0,matrix->TranslateX); return (long) (x*matrix->ScaleX+y*matrix->RotateSkew0+matrix->TranslateX);}long getY( matrix,x, y)Matrix *matrix;long x;long y;{// printf("RotateSkew1 is %f ScaleY is %f matrix->TranslateY is %ld\n",matrix->RotateSkew1,matrix->ScaleY,matrix->TranslateY); return (long) (x*matrix->RotateSkew1+y*matrix->ScaleY+matrix->TranslateY);}void MatrixPrepare(matrix)Matrix *matrix;{ matrix->ScaleX = 1.0; matrix->ScaleY = 1.0; matrix->RotateSkew0 = matrix->RotateSkew1 = 0.0; matrix->TranslateX = matrix->TranslateY = 0;}Matrix MatrixMulti( n, m)Matrix *n;Matrix *m;{ Matrix mat; mat.ScaleX = n->ScaleX * m->ScaleX + n->RotateSkew0 * m->RotateSkew1; mat.RotateSkew0 = n->ScaleX * m->RotateSkew0 + n->RotateSkew0 * m->ScaleY; mat.RotateSkew1 = n->RotateSkew1 * m->ScaleX + n->ScaleY * m->RotateSkew1; mat.ScaleY = n->RotateSkew1 * m->RotateSkew0 + n->ScaleY * m->ScaleY; mat.TranslateX = getX(n,m->TranslateX,m->TranslateY); mat.TranslateY = getY(n,m->TranslateX,m->TranslateY); return mat;}Matrix invert(matrix)Matrix *matrix;{ Matrix mat; float det; det = matrix->ScaleX*matrix->ScaleY-matrix->RotateSkew0*matrix->RotateSkew1; mat.ScaleX = matrix->ScaleY/det; mat.RotateSkew0 = -matrix->RotateSkew0/det; mat.RotateSkew1 = -matrix->RotateSkew1/det; mat.ScaleY = matrix->ScaleX/det; mat.TranslateX = - (long)(mat.ScaleX * matrix->TranslateX + mat.RotateSkew0 * matrix->TranslateY); mat.TranslateY = - (long)(mat.RotateSkew1 * matrix->TranslateX + mat.ScaleY * matrix->TranslateY); return mat;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -