gpt4 book ai didi

python - 从 C 函数到 Python 的矩阵

转载 作者:太空宇宙 更新时间:2023-11-04 01:33:44 24 4
gpt4 key购买 nike

我正在使用 python 和 ctypes。我有一个 C 函数将四元数(类似于虚数)转换为矩阵。我知道,在像参数这样的函数中发送结果变量是不好的语气,所以我怎样才能将矩阵返回到类型数组 c_float*16 中的 python 代码。

float* QuaternionToMatrix(Quaternion q)
{
float matrix[16];

matrix[ 0] = 1.0f - 2.0f * ( q.y * q.y + q.z * q.z );
matrix[ 1] = 2.0f * (q.x * q.y + q.z * q.w);
matrix[ 2] = 2.0f * (q.x * q.z - q.y * q.w);
matrix[ 3] = 0.0f;

matrix[ 4] = 2.0f * ( q.x * q.y - q.z * q.w );
matrix[ 5] = 1.0f - 2.0f * ( q.x * q.x + q.z * q.z );
matrix[ 6] = 2.0f * (q.z * q.y + q.x * q.w );
matrix[ 7] = 0.0f;

matrix[ 8] = 2.0f * ( q.x * q.z + q.y * q.w );
matrix[ 9] = 2.0f * ( q.y * q.z - q.x * q.w );
matrix[10] = 1.0f - 2.0f * ( q.x * q.x + q.y * q.y );
matrix[11] = 0.0f;

matrix[12] = 0;
matrix[13] = 0;
matrix[14] = 0;
matrix[15] = 1.0f;

float* a = matrix;

return a;
}

最佳答案

您正在返回一个指向局部变量的指针。这将导致内存损坏。我建议创建一个 struct 封装你的矩阵并返回它:

typedef struct matrix {
float data[16];
} matrix;

matrix QuaternionToMatrix(Quaternion q) {
...
}

因为这会导致复制一定量的内存(大约 512 字节),您最好将矩阵作为输出参数传递:

void QuaternionToMatrix(Quaternion q, matrix *matrix) {
...
}

关于python - 从 C 函数到 Python 的矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11779767/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com