2013-08-30 25 views
7

我想用ILNumerics绘制一些3d表面。我注意到,如果我旋转它,ILCube不会保持表面的形状,这是因为它试图适合ILPanel中的立方体。但是,如果我使用ILCamera,它会保持形状,但周围没有立方体。下面是一个例子,如何在ILCube中保持形状

private void ilPanel1_Load(object sender, EventArgs e) 
{ 
    var scene = new ILScene(); 
    ILArray<float> A = ILSpecialData.torus(0.75f, 0.25f); 
    var sf = new ILSurface(A); 
    var pc = new ILPlotCube(); 
    pc.TwoDMode = false; 
    scene.Add(pc); 
    pc.Add(sf); 
    sf.Colormap = Colormaps.Jet; 
    var cb = new ILColorbar(); 
    cb.Location = new PointF(1, .1f); 
    sf.Children.Add(cb); 
    ilPanel1.Scene = scene; 
} 

,其结果是

enter image description here

和ILCamera

private void ilPanel1_Load(object sender, EventArgs e) 
{ 
    var scene = new ILScene(); 
    ILArray<float> A = ILSpecialData.torus(0.75f, 0.25f); 
    var sf = new ILSurface(A); 
    var cam = scene.Camera; 
    cam.Add(sf); 
    sf.Colormap = Colormaps.Jet; 
    var cb = new ILColorbar(); 
    cb.Location = new PointF(1, .1f); 
    sf.Children.Add(cb); 
    ilPanel1.Scene = scene; 
} 

,其结果是

enter image description here

有没有办法让ILCube保持表面的形状?或者在ILCamera表面添加一个立方体?谢谢。

回答

3

绘图立方体当前不支持等轴纵横比。但是自己添加这个很简单。

对于您的示例,绘图立方体(圆环面)的内容沿着Z轴拉伸,因为沿着Z方向的环面的扩展比在X或Y方向上更小。因此,情节立方体选择伸展内容以提供更好的细节。

为了显示无失真的圆环,确保情节立方体的轴范围在所有方向上等于:

pc.Limits.Set(new Vector3(-1,-1,-1), new Vector3(1,1,1)); 

在这里看到一个互动的例子:http://ilnumerics.net/ilcc.php?ilc=i63fb4c

ILNumerics plot cube without distortion

缺点:每次修改图块的内容(即添加/删除/更改数据)时,都必须调整限制设置。

+2

我刚刚尝试了您链接到的网站上的EXE输出...很酷的东西! :) – user492238

+0

感谢您的答案。 :) – Ehsan

相关问题