2201_75600134 2023-05-14 17:26 采纳率: 100%
浏览 13
已结题

现在想把这些已知坐标点之外的点z坐标调整为0,也就是把四个翘起的角压下去,请问该怎么操作呢代码操作如下:(关键词-插值)

咨询一个关于griddata函数的问题
我已知了一系列的三维坐标点,通过griddata函数插值后绘图得到了这样的效果图

img

我原始已知的坐标点阵是这样的

img

现在想把这些已知坐标点之外的点z坐标调整为0,也就是把四个翘起的角压下去,请问该怎么操作呢
代码操作如下:

clc;
clear all;
gcd1=importdata('圆形山包.txt');
gcd2=importdata('复原数据.txt');
x1=gcd1(:,1);
y1=gcd1(:,2);
z1=gcd1(:,3);
x2=gcd2(:,1);
y2=gcd2(:,2);
z2=gcd2(:,3);
[X1,Y1,Z1]=griddata(x1,y1,z1,linspace(min(x1),max(x1))',linspace(min(y1),max(y1)),'v4');
[X2,Y2,Z2]=griddata(x2,y2,z2,linspace(min(x2),max(x2))',linspace(min(y2),max(y2)),'v4');
figure(1)
mesh(X1,Y1,Z1)
figure(2)
mesh(X2,Y2,Z2)
figure(3)
plot(x2,y2,'*r')
hold on 
plot(x1,y1,'*b')

  • 写回答

2条回答 默认 最新

  • copy_editor 2023-05-14 21:47
    关注

    您好,我首先根据我的理解重复一下您的问题
    由于linspace命令,原本的近圆形区域变成了方形区域。
    而griddata采用双调和样条插值。双调和样条插值基于双调和函数,而双调和函数的三种形式中均含有二次函数。这导致了区域边界外函数取值的激增。
    您看我的描述是否基本符合。
    基于问题描述,我给出了两种思路。
    第一种是对边界值进行约束,均约束为零。示意代码如下

    x1 = [x1,min(x1),min(x1),max(x1),max(x1)];
    y1 = [y1,min(y1),max(y1),min(y1),max(y1)];
    z1 = [z1,0,0,0,0];
    

    但由于无法获取您的数据,不知道这种方法是否有效。还请您自行验证。
    第二种思路是。先进行插值,后筛选插值区域。
    这需要用到计算几何学的内容。
    使用函数convhull搜索边界,然后使用inpolygon函数判断哪些点在边界范围内。
    由于我选择的函数插值效果比较好,没有出现‘翘起’的情况,所以我将边界范围外的值设置为NaN,绘图时不进行绘制。
    实例代码如下。

    %% 初始化环境
    clear
    clc
    close all
    %% 对二维散点数据插值
    rng('default')
    xy = -2.5 + 5*rand([200 2]);
    x = xy(:,1);
    y = xy(:,2);
    z = x.*exp(-x.^2-y.^2);
    [x1,y1,z1] = griddata(x,y,z,linspace(min(x),max(x))',linspace(min(y),max(y)),'v4');
    figure(1)
    mesh(x1,y1,z1)
    hold on
    plot3(x,y,z,'o')
    xlim([-4,4])
    ylim([-4,4])
    hold off
    %% 筛选区域边界内的点
    k = convhull(x,y);
    figure(2)
    plot3(x(k),y(k),zeros(size(k)),'r')
    hold on
    plot3(x,y,z,'b*')
    [in,on] = inpolygon(x1,y1,x(k),y(k));
    z1(~in) = NaN;
    mesh(x1,y1,z1)
    hold off
    

    在筛选之前,在整个矩形区域内都进行了绘制

    img

    筛选后,仅在边界内进行绘制。

    img

    虽然没有使用您的数据,但应该能解决您的问题。
    希望对您有所帮助。
    也欢迎您私聊进一步交流。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月23日
  • 已采纳回答 5月15日
  • 创建了问题 5月14日

悬赏问题

  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument
  • ¥15 nginx反向代理获取ip,java获取真实ip
  • ¥15 eda:门禁系统设计
  • ¥50 如何使用js去调用vscode-js-debugger的方法去调试网页
  • ¥15 376.1电表主站通信协议下发指令全被否认问题
  • ¥15 物体双站RCS和其组成阵列后的双站RCS关系验证