查看: 1164|回复: 11|关注: 0

[已答复] matlab mesh画图如何使同一张图上的两个曲面显示两种不同的颜色?

[复制链接]

新手

10 麦片

财富积分


050


6

主题

18

帖子

0

最佳答案
发表于 2019-3-3 16:53:25 | 显示全部楼层 |阅读模式
本帖最后由 Fanegg 于 2019-3-3 17:04 编辑

matlab mesh画图:如何使同一张图上的两个曲面显示两种不同的颜色?
这大概就是一个曲面插值的程序,最后mesh两个曲面,但是我在网上看了很多方法都去尝试都行不通。。。
望高人指点!
主要就是最后一节画图部分:
  1. %% 画图
  2. figure
  3. mesh(X1,Y1,Z1)
  4. hold on
  5. mesh(X2,Y2,Z2)
  6. title('曲面重建');
  7. xlabel('X'); ylabel('Y');zlabel('Z');
  8. set(gca,'XTick',[0,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,1]);
  9. set(gca,'YTick',[0,0.02,0.08,0.14,0.2,0.22]);
  10. set(gca,'ZTick',[-0.025:0.005:0.005]);
  11. axis([0,1,-0.05,0.25,-0.025,0.005])
复制代码

完整代码如下:
  1. close all
  2. clear all
  3. clc
  4. %% 离散曲率值矩阵k,弧长矩阵ss,(包含边界点k=0,s=0)求出对应弧段的弧长-曲率线性方程
  5. %Strain=[0 1.75044E-04 1.53376E-04 1.32575E-04 1.12096E-04 9.16930E-05 7.12955E-05 5.08464E-05 3.01552E-05]%应变         
  6. %Dspl=[0 -8.57915E-04 -2.36228E-03 -4.51358E-03 -7.22375E-03 -1.04064E-02 -1.39754E-02 -1.78449E-02 -2.19286E-02]%位移
  7. Data= load('F:\ANSYS working directory\modal2\simulation.txt'); %从数据采集文件中提取
  8. Datas=Data(:,1);
  9. Strain=[zeros(1,4);reshape(Datas,8,4)];
  10. s(1)=0;i=2:9;s(i)=0.15+0.1*(i-2); %弧长:单位m
  11. ss=repmat(s',1,4);
  12. h=0.005;%厚度
  13. k=2*Strain/h;%曲率
  14. for i=1:1:8
  15.     for j=1:4
  16.         a(i,j)=(k(i+1,j)-k(i,j))/(ss(i+1,j)-ss(i,j)); %线性方程的参数
  17.         b(i,j)=(k(i,j)*ss(i+1,j)-k(i+1,j)*ss(i,j))/(ss(i+1,j)-ss(i,j));
  18.     end
  19. end
  20. %% 每一个弧段上每个点的坐标差
  21. syms p
  22. step=0.01; %分段步长
  23. u=1/step;
  24. for j=1:4
  25.     X(1,j)=0;Z(1,j)=0; %先计算起始点
  26.     k1=(k(2,j)/ss(2,j))*step;
  27.     X(2,j)= sin(k1)/k1;
  28.     Z(2,j)=(1-cos(k1))/k1;
  29.     for i=1:1:8
  30.         for q=(ss(i,j)+step):step:ss(i+1,j) %对第i段分段
  31.             m=q; %求出微元弧段端点的弧长位置和曲率
  32.             n=q+step;%微元弧段末点
  33.             theta=int(a(i,j)*p+b(i,j),m,n); %坐标系旋转的角度
  34.             id = round(q*u+1); %索引取正整数
  35.             X(id+1,j)=X(id,j)*cos(theta)-Z(id,j)*sin(theta); %坐标增量
  36.             Z(id+1,j)=X(id,j)*sin(theta)+Z(id,j)*cos(theta);
  37.         end
  38.     end
  39. end
  40. %% 计算每个点的坐标
  41. for j=1:4
  42.     XX(1,j)=X(1,j);
  43.     ZZ(1,j)=Z(1,j);
  44.     for i=1:1:ss(9,j)/step
  45.         XX(i+1,j)=XX(i,j)+X(i+1,j);
  46.         ZZ(i+1,j)=ZZ(i,j)+Z(i+1,j);
  47.     end
  48. end
  49. XXX = XX*step; %X坐标矩阵
  50. ZZZ = -ZZ*step;%Z坐标矩阵
  51. mm=size(XXX,1); %获得坐标矩阵的行数
  52. j=1:4;YY(j)=0.02+0.06*(j-1);
  53. YYY=repmat(YY,mm,1);%Y坐标矩阵
  54. %% 对比校核
  55. Datax=Data(:,2);
  56. Datay=Data(:,3);
  57. Dataz=Data(:,4);
  58. xb=[zeros(1,4);reshape(Datax,8,4)];
  59. yb=[zeros(1,4);reshape(Datay,8,4)];
  60. zb=[zeros(1,4);reshape(Dataz,8,4)];
  61. %% 曲面插值
  62. [X1,Y1]=meshgrid(0:0.001:1,0:0.001:0.22);
  63. Z1=griddata(XXX,YYY,ZZZ,X1,Y1);
  64. [X2,Y2]=meshgrid(0:0.0001:1,0:0.0005:0.22);
  65. Z2=griddata(xb,yb,zb,X2,Y2);
  66. %% 画图
  67. figure
  68. mesh(X1,Y1,Z1)
  69. hold on
  70. mesh(X2,Y2,Z2)
  71. title('曲面重建');
  72. xlabel('X'); ylabel('Y');zlabel('Z');
  73. set(gca,'XTick',[0,0.15,0.25,0.35,0.45,0.55,0.65,0.75,0.85,1]);
  74. set(gca,'YTick',[0,0.02,0.08,0.14,0.2,0.22]);
  75. set(gca,'ZTick',[-0.025:0.005:0.005]);
  76. axis([0,1,-0.05,0.25,-0.025,0.005])
复制代码






MATLAB 基础讨论
版块优秀回答者

入门

103 麦片

财富积分


50500


1

主题

175

帖子

21

最佳答案
发表于 2019-3-4 15:53:25 | 显示全部楼层
你给个粗略的样图示例,我好像做过一个类似的案例,确认一下

新手

10 麦片

财富积分


050


6

主题

18

帖子

0

最佳答案
 楼主| 发表于 2019-3-4 17:01:06 | 显示全部楼层
18833126693 发表于 2019-3-4 15:53
你给个粗略的样图示例,我好像做过一个类似的案例,确认一下

就是这样俩曲面

就这样两个曲面

就这样两个曲面

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1437

帖子

104

最佳答案
  • 关注者: 70
发表于 2019-3-4 17:05:46 | 显示全部楼层
看mesh的帮助,应该是可以设置color那一项。大家大部分都是
mesh(x,y,z)

其实, 还有
mesh(x,y,z,c)

设置c就好了。 默认c=z;

  1. clear all
  2. clc
  3. clf

  4. [x,y,z]=peaks(30);

  5. z1 = z;
  6. z2 = z-1*rand(size(z));

  7. c1 =z1-10;
  8. c2 =z2 +10;

  9. hold on
  10. mesh(x,y,z1,c1,'linewidth',0.5);
  11. mesh(x,y,z2,c2,'linewidth',1.5);
  12. hidden off

  13. colormap(jet)
  14. view(30,40)
复制代码
fig_2colors.png


新手

10 麦片

财富积分


050


6

主题

18

帖子

0

最佳答案
 楼主| 发表于 2019-3-6 19:49:44 | 显示全部楼层
meatball1982 发表于 2019-3-4 17:05
看mesh的帮助,应该是可以设置color那一项。大家大部分都是
mesh(x,y,z)

但是没有办法设置自己想要的颜色

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1437

帖子

104

最佳答案
  • 关注者: 70
发表于 2019-3-6 20:26:46 | 显示全部楼层
本帖最后由 meatball1982 于 2019-3-6 20:30 编辑
Fanegg 发表于 2019-3-6 19:49
但是没有办法设置自己想要的颜色

你想要什么 color?
fig_you_want_col.png
  1. hold on
  2. mesh(x,y,z1,'edgecolor','r','linewidth',0.5);
  3. mesh(x,y,z2,'edgecolor','b','linewidth',1.5);
  4. hidden off

复制代码


fig_you_want_col.png

新手

10 麦片

财富积分


050


6

主题

18

帖子

0

最佳答案
 楼主| 发表于 2019-3-6 20:28:03 | 显示全部楼层

一个面红色,一个面蓝色?

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1437

帖子

104

最佳答案
  • 关注者: 70
发表于 2019-3-6 20:29:50 | 显示全部楼层
本帖最后由 meatball1982 于 2019-3-6 20:33 编辑
Fanegg 发表于 2019-3-6 20:28
一个面红色,一个面蓝色?

就差这10几秒。稍等。6L

新手

10 麦片

财富积分


050


6

主题

18

帖子

0

最佳答案
 楼主| 发表于 2019-3-6 20:36:50 | 显示全部楼层
meatball1982 发表于 2019-3-6 20:29
就差这10几秒。稍等。6L

需要我把数据给你吗?

MATLAB 基础讨论
版块优秀回答者

中级

551 麦片

财富积分


5001500


72

主题

1437

帖子

104

最佳答案
  • 关注者: 70
发表于 2019-3-7 11:29:23 | 显示全部楼层
Fanegg 发表于 2019-3-6 20:36
需要我把数据给你吗?

根据6L应该能画出来了,你的问题再哪?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表