最近,我想使用C来实现矩阵公式,如下所示:
其中,P_{i,j}={x_{i,j},y_{i,j},z_{i,j}}
这是我的类C算法:
SurfacePoint(i,j,p,q,Nu,Nv,P){
uidx = i - p;
S = 0.0;
for(l=0; l<=q; l++){
temp = 0.0;
vidx = j - q + l
for(k=0; k<=p; k++){
temp = temp + Nu[k]*P[uidx+k][vidx];
}
S = S + Nv[l]*temp;
}
return S;
}
但是,由于P
是一个向量而不是实数,所以我需要使用数组temp
和数组S
来恢复结果
uidx = i - p;
for(l = 0; l <= q; l++){
temp[0] = 0;
temp[1] = 0;
temp[2] = 0;
vidx = j - q + l;
for(k = 0; k <= p; k++){
temp[0] = temp[0] + Nu[k]*P[uidx+k][vidx][0];
temp[1] = temp[1] + Nu[k]*P[uidx+k][vidx][1];
temp[2] = temp[2] + Nu[k]*P[uidx+k][vidx][2];
}
S[0] = S[0] + Nv[l]*temp[0];
S[1] = S[1] + Nv[l]*temp[1];
S[2] = S[2] + Nv[l]*temp[2];
}
对于C,我是新人,所以我想知道:
答案 0 :(得分:1)
由于三维向量之间没有相互作用,我认为你可以实现一个正常的矩阵向量乘法函数来计算
Nu^T * P * Nv
并在P
个元素的每个维度上调用3次。但是,当然您需要重新组织存储,以便P
可以被视为具有实数元素的3个单独矩阵。