matlab中畫三維圖形

這裏主要講述兩個方法用matlab畫三維圖形:node

1.mesh函數c++

先看一個簡單的例子:函數

1 x = 1:1:3; 2 y = 1:1:4; 3 [X, Y] = meshgrid(x, y); 4 Z = zeros(4,3); 5 Z = [   1 2 3; 6         2 3 4; 7         3 4 5; 8         4 5 6] 9 mesh(X, Y, Z);

這是個簡單的用mesh函數畫的三維圖,結果是:spa

這裏須要注意一點:3d

矩陣Z的行列,Z的行是Y座標系的值(meshgrid的右邊位置的數y),Z的列是X座標系的值(meshgrid的左邊位置的數x)code

那下面講下我怎麼將本身的數據導入到Z矩陣中:blog

1.簡單的方法是直接將數據輸入到矩陣Z中,注意行列:it

 1 x = 1:1:22;  2 y = 1:1:101;  3 [X,Y] = meshgrid(x,y);  4 Z = zeros(101,22);  5 Z = [  6 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  7 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 ;  8 1 1 1 1 1 2 2 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  9 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  10 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  11 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  12 1 1 1 1 2 2 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  13 1 1 1 1 1 1 1 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  14 1 1 1 1 1 1 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  15 1 1 1 1 2 2 2 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  16 1 1 1 2 2 2 3 4 4 4 4 4 5 4 4 4 4 4 4 4 4 4 ;  17 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  18 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  19 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  20 1 1 1 1 1 1 1 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ;  21 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  22 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  23 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  24 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  25 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  26 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  27 1 1 1 1 1 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  28 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  29 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ;  30 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  31 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  32 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  33 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  34 1 1 1 1 1 1 2 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ;  35 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  36 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  37 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  38 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  39 1 1 1 2 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  40 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  41 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  42 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  43 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  44 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  45 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  46 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  47 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  48 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  49 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  50 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  51 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  52 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  53 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  54 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  55 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  56 1 1 1 1 2 2 2 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  57 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  58 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 ;  59 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 ;  60 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  61 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  62 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  63 1 1 1 1 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  64 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  65 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  66 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  67 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  68 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  69 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  70 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  71 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  72 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  73 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  74 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  75 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  76 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  77 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  78 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  79 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  80 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  81 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  82 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  83 4 1 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  84 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  85 1 1 1 1 2 2 2 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  86 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  87 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 ;  88 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  89 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  90 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  91 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  92 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ;  93 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  94 1 1 1 1 2 2 3 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  95 4 1 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ;  96 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ;  97 4 1 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 4 4 4 4 4 ;  98 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ;  99 1 1 1 1 2 2 3 4 4 4 4 4 4 5 4 4 4 4 4 4 4 4 ; 100 1 1 1 2 2 2 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 101 1 1 2 2 3 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 102 1 1 2 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 103 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 ; 104 1 1 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 4 5 ; 105 1 1 2 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 106 1 1 1 2 2 3 3 4 4 4 4 4 4 4 4 4 4 4 4 5 4 4 ; 107  ]; 108 mesh(X, Y, Z); 109 xlabel('cluster'); 110 ylabel('mrf node'); 111 zlabel('max label num');

結果是:class

方法2用plot3畫:grid

首先用c++寫段代碼,注意數據存儲的方式:

 1     fp = fopen("D://cluster_num_max.text", "w");  2     if(fp)  3  {  4         for (GLong v = 0; v < mrf.size(); v++)  5  {  6             for (GLong k = 0; k < canopy; k++)  7  {  8                 fprintf(fp, "%ld ", v + 1 );  9  } 10  } 11         fprintf(fp, "\n"); 12         for (GLong v = 0; v < mrf.size(); v++) 13  { 14             for (GLong k = 0; k < canopy; k++) 15  { 16                 fprintf(fp, "%ld ", k + 1 ); 17  } 18  } 19         fprintf(fp, "\n"); 20         for (GLong v = 0; v < mrf.size(); v++) 21  { 22             for (GLong k = 0; k < canopy; k++) 23  { 24                 GLong lCanopyTemp = mrf[v].stClusterNum_min_max[k].lLabel_pruning_cluster_num_max; 25                 fprintf(fp, "%ld ", lCanopyTemp ); 26  } 27             //fprintf(fp, ";\n");
28  } 29  } 30     //fprintf(fp, "\n");
31  fclose(fp); 32     fp = NULL;

獲得cluster_num_max.text後,matlab就能夠導入數據了。

1 load('D:\\cluster_num_max.text'); 2 y = cluster_num_max(1,:); 3 x = cluster_num_max(2,:); 4 z = cluster_num_max(3,:); 5 plot3(x,y,z); 6 xlabel('cluster'); 7 ylabel('mrf node'); 8 zlabel('max label num')

結果是:

補充mesh函數:

 1 [x,y]=meshgrid(-8:0.5:8);  2 z=sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2+eps);  3 subplot(2,2,1);  4 mesh(x,y,z);  5 title('mesh(x,y,z)')  6 subplot(2,2,2);  7 meshc(x,y,z);  8 title('meshc(x,y,z)')  9 subplot(2,2,3); 10 meshz(x,y,z) 11 title('meshz(x,y,z)') 12 subplot(2,2,4); 13 surf(x,y,z); 14 title('surf(x,y,z)')

 最後說一下plot3和mesh的圖怎麼不同

 

左圖是plot3,右圖是mesh。能夠看到當(1,4,1)數據緊接着是(2,1,1),它們相連了。

相關文章
相關標籤/搜索