使用ILnumerics和c#绘制3d表面

时间:2013-09-20 20:30:58

标签: c# plot ilnumerics

我使用过这段代码:

    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() }
                }
            });
        }
    }

这会产生:

enter image description here

但是我检查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);它就不会画任何东西

1 个答案:

答案 0 :(得分:1)

曲面绘制网格。必须提供一个网格,以便让表面有机会理解如何连接点,这些点应该是邻居。

重塑应该不是问题,因为原始数据必须代表网格/矩阵的点。因此,对该矩阵的重塑肯定会有效。

reshape(10)创建一个长度为10的向量,因为向量确实表示一条线,但不是一个区域 - 没有绘制任何东西。记住:曲面绘制网格或矩阵。