C初始化矩阵
问题描述:
我有以下矩阵;C初始化矩阵
Vertex axisVertices[] =
{
{ { x_0, y_0, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, // origin
{ { x_Max, y_0, 0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, // eixo y
{ { x_0, y_Max, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } } // eixo x
};
#define x_0 0.0f
#define y_0 0.0f
#define x_Max 1.5f
#define y_Max 1.7f
我需要能够像这样初始化矩阵。在C中执行此操作的唯一可能方式是定义枚举或使用#define,因为像这样初始化不能用于常量。
问题是,我需要能够在整个代码中更改值x_Max
和y_Max
,因此#define
在这种情况下无法正常工作。我怎样才能做到这一点?
答
您可以传递参数给#defines
创建macros
例如,你可以做
#define INIT(x_0, y_0, x_Max, y_Max) \
{ { { x_0, y_0, 0.0f, 1.0f }, { 1.0f, 1.0f, 1.0f, 1.0f } }, \
{ { x_Max, y_0, 0.0f, 1.0f }, { 0.0f, 1.0f, 0.0f, 1.0f } }, \
{ { x_0, y_Max, 0.0f, 1.0f }, { 0.0f, 0.0f, 1.0f, 1.0f } } }
,你可以使用这样
Vertex axisVertices[] = INIT(0.0f, 0.0f, 1.5f, 1.7f);
随后的x_0
所有出现的将是内容替换通过0.0f
。就像将参数传递给函数一样。
将参数传递给'#define'有什么问题? – FDinoff 2013-04-21 21:23:19
一旦我定义x_0例如,我不能改变它的价值。不是吗? – 2013-04-21 21:25:11
是否有帮助?还是有什么你仍然困惑?你还需要在运行时更改x_0吗? – FDinoff 2013-04-22 13:38:36