将3D点云“展开”到2D地图上

17次浏览(过去30天)
lovlar
lovlar 2021年9月20日
编辑: lovlar2021年9月21日
我从fe分析中得到一个三维点云,每个点都有压力值。X、y、z坐标和压力值按列存储在csv文件中。下面是这些点的3d散点图:
如你所见,坐标创建了一个曲面/条。现在想象一下,你沿着这个表面放一条胶带,把压力大小投射到上面,然后把它压平。然后,您将拥有一个2d地图,其中x轴上的投影x值,y轴上的y值与csv文件中的相同,然后是每个点的各自压力值。
我想把压力分布画成彩色的二维等高线图。
这里是我的尝试脚本解决方案,但现在我卡住了:
clc
清晰的所有
%导入CSV文件。
文件名=“contpres_87905_0.11333.csv”
C = readtable(文件名);
%坐标系在ANSYS中旋转。几何在第二象限。
x = C.zcor;
y = C.ycor;
z = C.xcor;
一个= C.Pressure;
%删除只有零的行
X = X (any(X,2),:);
Y = Y (any(Y,2),:);
Z = Z (any(Z,2),:);
A = A(any(A,2),:);
使用下面的自定义函数获取新的x轴坐标
tc = unfoldCircum (x, z);
%的长度
l =长度(A);
%的幅度插值
Xv = linspace(min(tc),max(tc),l);
Yv = linspace(min(y),max(y),l);
[X,Y] = ndgrid(xv,yv);
Z = griddata(tc, y, A, X, y);
%的阴谋
提出=喷气(16);使用"jet"比例设置栏
colormap城市规划机构(cMap);
h = surf(X,Y,Z);
集(h,“edgecolor”“没有”);
视图(2);
colorbar;
xlim ([min (tc) max (tc)))
%%%%%%%%%% function [tcods] = unfoldCircum(x,y)
这个函数接受一个二维坐标数据集,并且:
% -根据数据创建光滑样条s(t)
% -将2d点[xi,yi]投影到样条上
% -返回每个点各自的t坐标
% x,y=相同长度的x和y坐标的列向量
%输出
% tDist =从磁带开始沿磁带的坐标
函数[tcods] = unfoldCircum(x,y)
np =长度(x);
如果(np ~= length(y))
错误(输入向量的大小不一样
结束
tCoords = 0 (np, 1);
%排序x和y坐标。
[xsort,印第安纳州]= (x)进行排序;
%新的x向量。几何图形的x坐标从~-60到0mm
X_s = linspace(min(x), 0,np)';
%三次平滑样条使用SPLINEFIT包
% https://se.mathworks.com/matlabcentral/fileexchange/71225-splinefit
y_struct = splinefit (xsort y(印第安纳州),20);
y_s = ppval (y_struct间);
% TODO:计算总样条长度
l = 100;
minDistV = 0 (np, 2);
%对于每个坐标[xi yi],找到最近的样条坐标[xsj ysj]。
我= 1:np
minDist = 1 e9;
J = 1:np
Dist2 =sqrt((x(i)-x_s(j))²+ (y(i)-y_s(j))²);
如果dist2 < minDist
minDist = dist2;
minDistV(我,1)= j;
minDistV(我,2)= minDist;
结束
结束
%计算t坐标
tcods (i)=minDistV(i,1)/np * l;
结束
结束

答案(0)

社区寻宝

在MATLAB Central中寻找宝藏,并了解社区如何帮助您!

开始狩猎!