int D2d_negate_y (double a[3][3], double b[3][3]){ double neg[3][3] ; D2d_make_identity(neg); neg[1][1]=-1; D2d_mat_mult(a,neg,a); D2d_mat_mult(b,b, neg); return 1; }
int D2d_scale (double a[3][3], double b[3][3], double sx, double sy){ double scale[3][3] ; D2d_make_identity(scale); scale[0][0] = sx; scale[1][1] = sy; D2d_mat_mult(a, scale, a); scale[0][0] = 1/sx; scale[1][1] = 1/sy; D2d_mat_mult(b, b, scale); return 1; }
int D2d_negate_y(double a[3][3], double b[3][3]){ double t[3][3]; D2d_make_identity(t); t[1][1] = -1; D2d_mat_mult(a, t,a); D2d_mat_mult(b, b,t); return 1; }
int D2d_scale(double a[3][3], double b[3][3], double sx, double sy){ double t[3][3]; D2d_make_identity(t); t[0][0] = sx; t[1][1] = sy; D2d_mat_mult(a, t,a); t[0][0] = 1/sx; t[1][1] = 1/sy; D2d_mat_mult(b, b,t); return 1; }
int D2d_translate (double a[3][3], double b[3][3], double dx, double dy) // a = translation*a // b = b*translation_inverse { double t[3][3] ; D2d_make_identity(t) ; t[0][2] = dx ; t[1][2] = dy ; D2d_mat_mult(a, t,a) ; t[0][2] = -dx ; t[1][2] = -dy ; D2d_mat_mult(b, b,t) ; return 1 ; }
int D2d_rotate (double a[3][3], double b[3][3], double radians){ double rotate[3][3], r2[3][3] ; D2d_make_identity(rotate); D2d_make_identity(r2); rotate[0][0] = cos(radians); rotate[0][1] = -sin(radians); rotate[1][0] = sin(radians); rotate[1][1] = cos(radians); D2d_mat_mult(a, rotate, a); r2[0][0] = cos(-radians); r2[0][1] = -sin(-radians); r2[1][0] = sin(-radians); r2[1][1] = cos(-radians); D2d_mat_mult(b,b,r2 ); return 1; }
int D2d_rotate(double a[3][3], double b[3][3], double rads){ double t[3][3] = { {cos(rads), -sin(rads), 0} , {sin(rads), cos(rads), 0}, {0,0,1} }; D2d_mat_mult(a, t,a); double q[3][3] = { {cos(rads), sin(rads), 0} , {-sin(rads), cos(rads), 0}, {0,0,1} }; D2d_mat_mult(b, b,q); return 1; }