【问题标题】:Linear interpolation inside a 3D triangle [closed]3D三角形内的线性插值[关闭]
【发布时间】:2016-09-27 10:53:24
【问题描述】:

我在 3D 三角形的节点上有数据,我需要插值以获取三角形内的数据。

这是我尝试做的:

  x=[0,1,0];
 y=[1,0,1];
 z=[0,2,-1];
 [X,Y,Z]=meshgrid(x,y,z);
 v=[2,5,-1];
 xs=linspace(0,1,.1);
 ys=linspace(0,1,.1);
 zs=linspace(-1,2,.1);
 Vs = interp3(X,Y,Z,v,xs,ys,zs,'linear');

我得到一个错误:输入坐标数组的数量不等于这些数组的维数 (NDIMS)。

怎么了?

【问题讨论】:

    标签: matlab


    【解决方案1】:

    X包含节点的 x 坐标,Y 包含节点的 y 坐标,Z 包含节点的 z 坐标。将值/数据存储在V 中的节点上。现在,您可以通过将这些点的 x、y 和 z 坐标保存在 XsYsZs 中来指定要插入数据的位置。您的数据在这些点上的价值是:

    Vs = interp3(X,Y,Z,V,Xs,Ys,Zs,'linear');
    

    你可以看看Matlab documentation

    编辑:当您添加代码时:错误似乎是您的V 的尺寸错误。如果您查看示例 Matlab Docu -> interp3 -> Evaluate Outside the Domain of X, Y, and Z 您会看到,V必须具有XY和@987654334的维度@组合。来自文档:size(V) = [length(Y) length(X) length(Z)] 用于向量 XYZ

    这是一个例子:

    X = linspace(-1,2,5);
    Y = linspace(-1,7,23);
    Z = linspace(3,9,23);
    V = rand(23,5,23);
    
    xq = linspace(0,1,34);
    yq = linspace(0,2,34);
    zq = linspace(4,5,34);
    vq = interp3(X,Y,Z,V,xq,yq,zq,'linear',-1);
    

    【讨论】:

    • X Y 和 Z 应该使用 meshgrid 网格化? Xs Ys Zs 应该是向量吧?
    • X,Y 和 Z 也可以是向量(Matlab 文档 -> interp3 -> 输入参数)。所以 X(1) 是第一个节点的 x 坐标,X(2) 是第二个节点的坐标,.... Y 和 Z 也是如此。
    • Xs、Ys 和 Zs 也一样,它们也可以是向量。
    • 我将代码添加到问题中
    • 如果你能帮我找出我的代码有什么问题,我将不胜感激
    猜你喜欢
    • 2012-02-29
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2012-06-13
    • 1970-01-01
    • 2019-06-06
    • 1970-01-01
    相关资源
    最近更新 更多