复合文字可以使用自C99。 你可以写如下:
void rotate(Point *p, float theta){ int choice = ((int)theta/90)%4; switch(choice){ case 0: matMult(p, (Mat3){{1.0,0.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}}); break; case 1: matMult(p, (Mat3){{0.0,-1.0,0.0}, {1.0,0.0,0.0}, {0.0,0.0,1.0}}); break; case 2: matMult(p, (Mat3){{-1.0,0.0,0.0}, {0.0,-1.0,0.0}, {0.0,0.0,1.0}}); break; case 3: matMult(p, (Mat3){{0.0,1.0,0.0}, {-1.0,0.0,0.0}, {0.0,0.0,1.0}}); break; default: matMult(p, (Mat3){{1.0,0.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}}); break; } }
无法在C中分配矩阵,只能初始化矩阵或分配其各个组件。
有几种方法可以在这里进行,最简单的方法 也许不是一个 switch 但是一阵 Mat3
switch
Mat3
static Mat3 const matrix[] = { {{1.0,0.0,0.0}, {0.0,1.0,0.0}, {0.0,0.0,1.0}}, {{0.0,-1.0,0.0}, {1.0,0.0,0.0}, {0.0,0.0,1.0}}, {{-1.0,0.0,0.0}, {0.0,-1.0,0.0}, {0.0,0.0,1.0}}, {{0.0,1.0,0.0}, {-1.0,0.0,0.0}, {0.0,0.0,1.0}}, }; unsigned choice = ((unsigned)(theta/90))%4u; matMult(p, matrix[choice]);
const
static
unsigned
choice
%
0
3