【问题标题】:Subtract delaunay surfaces from each other相互减去 delaunay 曲面
【发布时间】:2017-04-22 17:40:45
【问题描述】:

我有一个由下面的代码创建的表面和另一个由完全相同的代码创建的表面。我想看看另一个图中的高度差异。我怎么能做到这一点?已经使用减号运算符进行操作,但这不起作用。

此外,矩阵的大小不同!

感谢您的帮助!

x1 = Cx1;
y1 = Cy1;
z1 = Cz1;
tri1 = delaunay(x1,y1);


fig1 = figure%('units','normalized','outerposition',[0 0 1 1]);
trisurf(tri1,x2,y2,z2)
xlabel('x [mm] ','FontSize',30)
ylabel('y [mm] ','FontSize',30)
zlabel('z [mm] ','FontSize',30)

【问题讨论】:

  • 您首先需要定义您希望如何输出差异。例如,您想将一个表面映射到另一个表面,然后进行差异化吗?或者你想要一个保持两者全分辨率的多边形表面?或者,别的什么?
  • 感谢您的回答。哦好的。你有什么建议?如果可能的话,我很想学习这两种方式。所以我们可以在这个线程中用一块石头杀死两只鸟:)
  • 创建一个新的多边形表面并非易事。但无论您如何操作,您都需要在功能上定义值如何在您的三角形元素中变化。我相信trisurf 函数假设线性变化。然后,您可以计算三角形上任何给定点的值,从而在两个三角剖分之间进行插值。
  • 你能举个例子吗?这就是我问的原因:) 我想在单独的图中看到高度的差异。那太棒了!

标签: matlab delaunay


【解决方案1】:

解决此问题的最简单方法是从一个网格插值到另一个网格。当一种方法比另一种分辨率更高时,或者当您不关心单个节点的结果,而是关心跨元素的整体模式时,这种方法很有效。如果不是这种情况,那么您将遇到一个非常复杂的问题,因为您需要创建一个完全捕获两个三角剖分的所有节点和边缘的多边形表面。考虑以下一对三角形图案:

捕获所有变化的表面需要具有构成它们的所有顶点和边缘,这不是纯粹的三角形表面。因此,让我们改为假设更简单的情况。要将结果从一个三角剖分映射到另一个三角剖分,您只需制定函数来定义值如何沿三角形变化,更广泛地称为basis functions。通常假设三角形的节点(即顶点)之间的值沿着三角形的表面线性变化。如果你愿意,你可以做不同的事情,它只需要定义新的基函数。如果我们使用线性函数,那么 2D 中的方程非常简单。假设您创建了一个数组trimap,其中包含另一个三角剖分的每个顶点所在的三角形。 This can be accomplished using the info here。然后,我们将当前三角形的顶点坐标分别设置为(x1,y1)、(x2,y2)、(x3,y3),然后进行数学运算:

for cnt1=1,npoints
  x1=x(tri1(trimap(cnt1),1));
  x2=x(tri1(trimap(cnt1),2));
  x3=x(tri1(trimap(cnt1),3));
  y1=y(tri1(trimap(cnt1),1));
  y2=y(tri1(trimap(cnt1),2));
  y3=y(tri1(trimap(cnt1),3));
  delta=x2*y3+x1*y2+x3*y1-x2*y1-x1*y3-x3*y2;
  delta1=(x2*y3-x3*y2+xstat(cnt1)*(y2-y3)+ystat(cnt1)*(x3-x2));
  delta2=(x3*y1-x1*y3+xstat(cnt1)*(y3-y1)+ystat(cnt1)*(x1-x3));
  delta3=(x1*y2-x2*y1+xstat(cnt1)*(y1-y2)+ystat(cnt1)*(x2-x1));
  weights(cnt1,1)=delta1/delta;
  weights(cnt1,2)=delta2/delta;
  weights(cnt1,3)=delta3/delta;
  z1=z(tri1(trimap(cnt1),1));
  z2=z(tri1(trimap(cnt1),2));
  z3=z(tri1(trimap(cnt1),3));
  valinterp(cnt1)=sum(weights(cnt1,:).*[z1,z2,z3]);
end

valinterp 是每个点的插值。 Herehere 是一些很好的幻灯片,解释了这一切背后的数学原理。请注意,我没有测试过任何这段代码。另请注意,您将需要做一些事情来分配三角测量之外的值。也许是一个空值,或者一个反距离加权值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-27
    • 2019-06-28
    • 1970-01-01
    • 2012-07-14
    • 2016-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多