Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 三维曲面插值_C#_Ilnumerics - Fatal编程技术网

C# 三维曲面插值

C# 三维曲面插值,c#,ilnumerics,C#,Ilnumerics,我想用c#插值曲面。情况如下: 给出了一组x,y,z坐标。 现在我想使用更精细的网格在这些点之间插值。 实际上我想知道某一点的z坐标,例如x=2.2,y=1.6z= 我能够使用MatLab解决插值问题,但在使用c#时没有成功。。 此外,我能够用ilnumerics绘制曲面,并试图在他们的主页上找到一些信息 编辑: 我想我需要澄清一些事情——对不起,问我问题的方式很混乱 在这里,您可以看到我如何从一些点绘制曲面: using System; using System.Drawing; using

我想用c#插值曲面。情况如下:

给出了一组x,y,z坐标。 现在我想使用更精细的网格在这些点之间插值。 实际上我想知道某一点的z坐标,例如x=2.2,y=1.6z=

我能够使用MatLab解决插值问题,但在使用c#时没有成功。。 此外,我能够用ilnumerics绘制曲面,并试图在他们的主页上找到一些信息

编辑:

我想我需要澄清一些事情——对不起,问我问题的方式很混乱

在这里,您可以看到我如何从一些点绘制曲面:

using System;
using System.Drawing;
using System.Windows.Forms;
using ILNumerics;
using ILNumerics.Drawing;
using ILNumerics.Drawing.Plotting; 

namespace Surface
{
   public partial class Form1 : Form
   {
      public Form1()
      {
         InitializeComponent();
      }

      private void ilPanel1_Load(object sender, EventArgs e)
      {
         using (ILScope.Enter())
         {
            ILArray<float>  R = ILMath.linspace<float>(0, 5, 5);
            ILArray<float> R1 = ILMath.linspace<float>(0, 25, 5);
            ILArray<float>  y = 1;
            ILArray<float>  x = ILMath.meshgrid(R, R, y);
            ILArray<float> z = ILMath.meshgrid(R * R, R, y);
            ILArray<float> Z = ILMath.zeros<float>(x.S[0], x.S[1], 3);

            Z[":;:;1"] = x;
            Z[":;:;2"] = y;
            Z[":;:;0"] = z;

             ilPanel1.Scene.Add(new ILPlotCube(twoDMode: false) {
                new ILSurface(Z, colormap: Colormaps.Cool) {
                    Colors = 1.4f * x * x * x + 0.13f * y * y,
                    Childs = { new ILColorbar() }
                }
            });
         }
      }
   }
}
使用系统;
使用系统图;
使用System.Windows.Forms;
使用数字法;
使用数字。绘图;
使用ILNumerics.Drawing.Plotting;
名称空间曲面
{
公共部分类Form1:Form
{
公共表格1()
{
初始化组件();
}
私有无效ilPanel1_加载(对象发送方、事件参数e)
{
使用(ILScope.Enter())
{
ILArray R=ILMath.linspace(0,5,5);
ILArray R1=ILMath.linspace(0,25,5);
i阵列y=1;
ILArray x=ILMath.meshgrid(R,R,y);
ILArray z=ILMath.meshgrid(R*R,R,y);
ILArray Z=ILMath.zero(x.S[0],x.S[1],3);
Z[“:;:;1”]=x;
Z[“:;:;2”]=y;
Z[“:;:;0”]=Z;
ilPanel1.Scene.Add(新ILPlotCube(twoDMode:false){
新的ILSurface(Z,colormap:Colormaps.Cool){
颜色=1.4f*x*x*x+0.13f*y*y,
Childs={new ILColorbar()}
}
});
}
}
}
}

x和y坐标从0到5呈线性分布,z坐标呈二次型。现在我想计算某个x,y坐标下的z坐标值,例如x=2.2,y=1.6z=??-这绝对不是我表面上的一个已知点。因此,我认为使用“更精细”的网格对曲面进行插值是个好主意,这样我就能够读取z坐标的值…

有不同的插值技术可供选择。我建议从双线性插值开始:

或者将每个四边形划分为两个三角形,并使用重心插值:


函数的z坐标计算如下:

 ILArray<float> z = ILMath.meshgrid(R * R, R, y);
编辑:如果底层函数未知,您可以

  • 尝试学习该函数(使用ridge_regression()或pinv()),或
  • 从相邻栅格点的数据进行插值
目前,ILNumerics中没有相应的函数(如“interp2”)。但是,在您的情况下-仅需要对一个点进行插值(?),可以找到相邻的网格点并使用常用的插值方法之一


编辑:随着这些内容的发布,事情变得更加容易了。现在,您可以用一行高速插入任意维度。

如果您在代码方面遇到问题,请发布代码。也许是你的MatLab代码。嗨,首先感谢你的重播。。我发现有人用MatLab解决的问题并不完全相同,但你可以检查这个链接:z坐标有一个已知的关系,在我的情况下不是这样……我建议你阅读关于提问的文章。如果不提供完整的工作代码,你就无法说出你遇到的问题,也无法提供帮助。谢谢你的建议^^^但我没有要求完整的工作代码!我在问是否有人知道如何在使用c#时解决3d曲面的插值问题,也许这还取决于回答问题的人是如何理解这个问题的。你唯一要问的是“有没有人有用c#解决这个问题的经验?”。“是”的回答对你有什么帮助?您遇到了问题,但您没有提供足够的详细信息供任何人帮助。嘿,谢谢您的回答,但我不需要任何插值方法。正如我之前所说,我能够在MatLab中解决这个问题,现在我问是否有人对如何用c#解决这个问题有想法…“我不需要任何插值方法”?你说,它在Matlab中工作。为什么不在C语言中使用与在Matlab中相同的方法呢?我也不清楚你的问题。如果理解c语言是真正的问题,我建议你阅读一些c语言教程。这应该是一个好的:。别忘了研究数组:是的,在MatLab中它更容易一些,因为我可以使用像interp2这样的函数进行插值。。。我在寻找一种从给定的点集插值曲面的算法。直线插值和重心插值就是这样。二维插值算法。请再看一眼:想象一下你是在插值高度而不是颜色。在此算法中,Q11、Q12、Q21和Q22应替换为给定拐角处的高度,P是位置(x,y)处的高度,感谢您的解释。。在我的例子中,我假设知道z坐标的关系。但实际上我“只”有一组用x,y,z坐标表示的点。这些点应该用一个曲面插值,它应该在曲面上的任何点提供z坐标…嘿,Haymo,我有一组点-大约25个点。在这些点中,我想计算一个曲面,其中所有点都必须在曲面上。因此,有了插值曲面,应该可以计算这些“控制点”之间的z坐标。是否有任何函数或方法可以从某些给定点确定曲面??您需要一个函数,该函数可以从给定点生成网格。常见的网格生成器是delaunay三角剖分:ILNumerics核心包目前没有提供此类功能。谢谢,一切都很简单
x
<Single> [5,5]
[0]: 0,00000 1,25000 2,50000 3,75000 5,00000 
[1]: 0,00000 1,25000 2,50000 3,75000 5,00000 
[2]: 0,00000 1,25000 2,50000 3,75000 5,00000 
[3]: 0,00000 1,25000 2,50000 3,75000 5,00000 
[4]: 0,00000 1,25000 2,50000 3,75000 5,00000 

y
<Single> [5,5]
[0]: 0,00000 0,00000 0,00000 0,00000 0,00000 
[1]: 1,25000 1,25000 1,25000 1,25000 1,25000 
[2]: 2,50000 2,50000 2,50000 2,50000 2,50000 
[3]: 3,75000 3,75000 3,75000 3,75000 3,75000 
[4]: 5,00000 5,00000 5,00000 5,00000 5,00000 

z
<Single> [5,5]
[0]: 0,00000 1,56250 6,25000 14,06250 25,00000 
[1]: 0,00000 1,56250 6,25000 14,06250 25,00000 
[2]: 0,00000 1,56250 6,25000 14,06250 25,00000 
[3]: 0,00000 1,56250 6,25000 14,06250 25,00000 
[4]: 0,00000 1,56250 6,25000 14,06250 25,00000 
x=2.2, y=1.6 z =4.84