我使用过这段代码:
private void ilPanel1_Load(object sender, EventArgs e)
{ using (ILScope.Enter())
{
ILArray<float> X = new float[] { 0, 0, 1, 1, 2.5F, -2.6F, 5, 9, 1, 38 };
ILArray<float> Y = new float[] { 1, 0, 1, 0, 1.5F, 0.5F, 5, 9, 1, 39 };
ILArray<float> Z = new float[] { 0, 0, 1, 1, 0.4F, -0.2F, 5, 9, 1, 39 };
X = X.Reshape(2,5);
Y = Y.Reshape(2,5);
Z = Z.Reshape(2,5);
ilPanel1.Scene.Add(new ILPlotCube(twoDMode: false) {
new ILSurface(Z, colormap: Colormaps.Cool) {
Colors = 1.4f ,Children = { new ILColorbar() }
}
});
}
}
这会产生:
但是我检查this question并尝试修改弃用的ILnumerics solution(因为我没有找到其他c#代码),但仍然没有得到它,每个坐标(Z,X和Y)对应于数组中的一个切片(mxn)。因此重塑数据是必要的。
这部分是问题所在:
X = X.Reshape(2,5);
Y = Y.Reshape(2,5);
Z = Z.Reshape(2,5);
如果我没有给出正确的大小,程序会失败,所以在例子中我在每个向量上有10个元素,所以当重新调整时我会把2,5乘以10是......
如果我有11个元素的情况怎么样,就好像我把2.5重新塑造一样,我得到了错误?
怎么办?
我尝试使用X = X.Reshape(11);
但它失败了......如果我使用X = X.Reshape(10);
它就不会画任何东西
答案 0 :(得分:1)
曲面绘制网格。必须提供一个网格,以便让表面有机会理解如何连接点,这些点应该是邻居。
重塑应该不是问题,因为原始数据必须代表网格/矩阵的点。因此,对该矩阵的重塑肯定会有效。
reshape(10)创建一个长度为10的向量,因为向量确实表示一条线,但不是一个区域 - 没有绘制任何东西。记住:曲面绘制网格或矩阵。