Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C gl矩阵,如何创建向量和矩阵?_C_Matrix_Vector - Fatal编程技术网

C gl矩阵,如何创建向量和矩阵?

C gl矩阵,如何创建向量和矩阵?,c,matrix,vector,C,Matrix,Vector,这是gl矩阵中vec3.c的代码 vec3_t vec3_create(vec3_t vec) { vec3_t dest = calloc(sizeof(double_t), 3); if (vec) { dest[0] = vec[0]; dest[1] = vec[1]; dest[2] = vec[2]; } else { dest[0] = dest[1] = dest[2] = 0; } return dest; } mat4_t mat4_cr

这是gl矩阵中vec3.c的代码

vec3_t vec3_create(vec3_t vec) {
vec3_t dest = calloc(sizeof(double_t), 3);

if (vec) {
    dest[0] = vec[0];
    dest[1] = vec[1];
    dest[2] = vec[2];
} else {
    dest[0] = dest[1] = dest[2] = 0;
}

return dest;
}
mat4_t mat4_create(mat4_t mat) {
mat4_t dest = calloc(sizeof(double), 16);

if (mat) {
    dest[0] = mat[0];
    dest[1] = mat[1];
    dest[2] = mat[2];
    dest[3] = mat[3];
    dest[4] = mat[4];
    dest[5] = mat[5];
    dest[6] = mat[6];
    dest[7] = mat[7];
    dest[8] = mat[8];
    dest[9] = mat[9];
    dest[10] = mat[10];
    dest[11] = mat[11];
    dest[12] = mat[12];
    dest[13] = mat[13];
    dest[14] = mat[14];
    dest[15] = mat[15];
}

return dest;
}
如何使用该函数包装新向量? 如何创建具有不同值的向量? 我试图将双值设置为数组,如下所示:

vec3_t vec;
vec3_t vec3_create(vec);
vec[0] = 1.0;
vec[1] = 0.0;
vec[2] = 0.0;
vec3_t vec = vec3_create(NULL); // initially a vector with 0s
vec[0] = 1.0;                   // set the first element to 1.0
但我的EXC\u访问权限很差。矩阵也有同样的问题

gl矩阵中mat4.c中的代码

vec3_t vec3_create(vec3_t vec) {
vec3_t dest = calloc(sizeof(double_t), 3);

if (vec) {
    dest[0] = vec[0];
    dest[1] = vec[1];
    dest[2] = vec[2];
} else {
    dest[0] = dest[1] = dest[2] = 0;
}

return dest;
}
mat4_t mat4_create(mat4_t mat) {
mat4_t dest = calloc(sizeof(double), 16);

if (mat) {
    dest[0] = mat[0];
    dest[1] = mat[1];
    dest[2] = mat[2];
    dest[3] = mat[3];
    dest[4] = mat[4];
    dest[5] = mat[5];
    dest[6] = mat[6];
    dest[7] = mat[7];
    dest[8] = mat[8];
    dest[9] = mat[9];
    dest[10] = mat[10];
    dest[11] = mat[11];
    dest[12] = mat[12];
    dest[13] = mat[13];
    dest[14] = mat[14];
    dest[15] = mat[15];
}

return dest;
}
EXC\u访问错误

mat4_t transform_mat;
mat4_create(transform_mat);

vec3\u t
是指向标头中定义的双精度的指针

typedef double *vec3_t;
从标题中,您还可以找到一些文档,这些文档将告诉您如何使用它:

/*
 * vec3_t - 3 Dimensional Vector
 */

/*
 * vec3_create
 * Creates a new instance of a vec3_t
 *
 * Params:
 * vec - Optional, vec3_t containing values to initialize with. If NULL, the 
 * vector will be initialized with zeroes.
 *
 * Returns:
 * New vec3
 */
vec3_t vec3_create(vec3_t vec);
因此,您可能希望执行以下操作:

vec3_t vec;
vec3_t vec3_create(vec);
vec[0] = 1.0;
vec[1] = 0.0;
vec[2] = 0.0;
vec3_t vec = vec3_create(NULL); // initially a vector with 0s
vec[0] = 1.0;                   // set the first element to 1.0
关于矩阵:

mat4_t transform_mat = mat4_create(NULL);

这将分配内存,
transform\u mat
将指向其地址。您需要自己初始化这些值,因为它们在默认情况下没有初始化为0(就像使用vec3\u t一样)。

您不需要检查
calloc
是否返回null,如果内存不足,它会返回null。我的回答对您有意义吗?请检查,我正在使用平板电脑。无法验证。@Elyasin Yes vectors目前工作正常。只有那些矩阵。。。不知道现在怎么用。但我会检查文件。谢谢你更新答案。我建议做C++课程的第一个C课程(CLA)。我相信你需要学习一些基础知识。我相信这对你很有帮助。