如何基于圆盘接触点的半径、角度及温度数据生成热图?
嘿,我来帮你搞定这个圆盘温度热图的问题!你已经拿到了接触点的坐标和对应温度,只差把它们关联起来并可视化这一步啦,我给你分两种方案来实现:
第一步:先修正现有代码的小问题
你现有代码最后一行的变量名大小写不统一(前面定义的是小写x,y,x1,y1,调用时用了大写X,Y,X1,Y1),先改过来避免报错:
plot(x, y, x1, y1, 'black', x2, y2, 'black')
另外要注意:如果你的Theta是角度值(不是弧度),那计算x,y坐标时要转成弧度,MATLAB的三角函数默认用弧度!修改这两行:
x = r*cos(deg2rad(Theta')); % 角度转弧度 y = r*sin(deg2rad(Theta'));
第二步:温度关联与热图生成
方案1:快速直观的离散点温度映射
直接用scatter函数把每个接触点的颜色绑定到对应的温度,操作简单,能直接看到每个采样点的温度:
figure % 先画出圆盘内外轮廓 plot(x1, y1, 'black', 'LineWidth', 1.5) hold on plot(x2, y2, 'black', 'LineWidth', 1.5) % 绘制带温度颜色的接触点 scatter(x, y, 10, Tsurf_d, 'filled') % 10是点的大小,'filled'让点更醒目 colorbar % 显示温度色阶 colormap viridis % 可以换成jet、hot等你喜欢的色图 xlabel('X 坐标') ylabel('Y 坐标') title('圆盘接触点温度分布') axis equal % 保持圆盘的圆形比例,不会被拉伸变形 hold off
方案2:连续平滑的圆盘热图
如果想要整个圆盘区域的连续温度可视化,需要先把离散的采样点插值到网格化的圆盘区域,生成更美观的热图:
% 1. 创建圆盘的网格化坐标(覆盖整个圆盘范围) theta_grid = linspace(0, 2*pi, 200); % 角度网格(弧度) r_grid = linspace(0.0145, 0.0475, 100); % 半径网格,对应内外径 [R_grid, Theta_grid] = meshgrid(r_grid, theta_grid); X_grid = R_grid .* cos(Theta_grid); Y_grid = R_grid .* sin(Theta_grid); % 2. 将离散温度插值到网格上 % 用griddata函数实现笛卡尔坐标插值,cubic是三次插值,平滑效果好 T_grid = griddata(x, y, Tsurf_d, X_grid, Y_grid, 'cubic'); % 3. 绘制热图 figure pcolor(X_grid, Y_grid, T_grid) shading interp % 开启颜色平滑过渡 hold on % 叠加圆盘内外轮廓 plot(x1, y1, 'black', 'LineWidth', 1.5) plot(x2, y2, 'black', 'LineWidth', 1.5) colorbar colormap viridis xlabel('X 坐标') ylabel('Y 坐标') title('圆盘温度分布热图') axis equal hold off
小提示
- 插值方法可以根据数据情况更换:
nearest(最近邻,速度最快)、linear(线性插值)、cubic(三次插值,平滑度最高) - 色图可以自定义,比如
colormap cool或者colormap([0 0 1; 0 1 0; 1 0 0])来设置自己的颜色渐变 - 如果只想显示接触点区域的温度,不想插值整个圆盘,方案1会更适合你
内容的提问来源于stack exchange,提问作者Miguel Bernat Gallardo
相关产品推荐
相关产品推荐

