matrix.c.svn-base

来自「A Flash Player with ActionScript support」· SVN-BASE 代码 · 共 67 行

SVN-BASE
67
字号
#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 + =
减小字号Ctrl + -
显示快捷键?