MATLAB——patch繪製多邊形

patch原理

patch函數

  1. patch(X,Y,C)
    

      使用 X 和 Y 的元素作爲每個頂點的座標,以創建一個或多個填充多邊形。patch 以您指定頂點的順序連接這些頂點。要創建一個多邊形,請將 X 和 Y 指定爲向量。要創建多個多邊形,請將 X 和 Y 指定爲矩陣,其中每一列對應於一個多邊形。C 決定多邊形的顏色。

  2. patch(X,Y,Z,C) 
    

      使用 X、Y 和 Z 在三維座標中創建多邊形。要在三維視圖中查看這些多邊形,請使用 view(3) 命令。C 確定多邊形的顏色。

  3. patch('XData',X,'YData',Y)
    

      類似於 patch(X,Y,C),不同之處在於您不需要爲二維座標指定顏色數據。

  4. patch('XData',X,'YData',Y,'ZData',Z)
    

      類似於 patch(X,Y,Z,C),不同的是不需要爲三維座標指定顏色數據。

  5. patch('Faces',F,'Vertices',V) 
    

      創建一個或多個多邊形,其中 V 指定頂點的值,F 定義要連接的頂點。當有多個多邊形時,僅指定唯一頂點及其連接矩陣可以減小數據大小。爲 V 中的每個行指定一個頂點。要創建一個多邊形,請將 F 指定爲向量。要創建多個多邊形,請將 F 指定爲矩陣,其中一行對應於一個多邊形。不要求每個面都具有相同的頂點數。要指定不同數量的頂點,請以 NaN 值填充 F。

  6. patch(S) 
    

      使用結構體 S 創建一個或多個多邊形。結構體字段對應於補片屬性名稱,字段值對應於屬性值。例如,S 可以包含字段 Faces 和 Vertices。

  7. patch(___,Name,Value)
    

      創建多邊形,並使用名稱-值對組參數指定一個或多個補片屬性。補片是包含所有已創建多邊形的數據的對象。您可以使用上述語法中的任意輸入參數組合指定補片屬性。例如,‘LineWidth’,2 將所有多邊形的輪廓寬度設置爲 2 磅。

  8. patch(ax,___) 
    

      將在由 ax 指定的座標區中,而不是當前座標區 (gca) 中創建補片。選項 ax 可以位於前面的語法中的任何輸入參數組合之前。

  9. p = patch(___) 
    

      返回包含所有多邊形的數據的補片對象。使用 p 可在創建補片對象後查詢並修改其屬性。有關屬性和說明的列表,請參閱 Patch 屬性。

實例

  在此使用 patch(‘Faces’,F,‘Vertices’,V) 函數繪製長方體。

定義頂點

  長方體的頂點定義如下圖所示,紅色編號爲頂點的編號。

連接順序

定義連接順序如下,對應上圖看

faces = [1 2 3 4
        5 6 7 8
        4 3 6 5
        3 2 7 6
        2 1 8 7
        1 4 5 8];

連接順序爲:

  1. 上面1->2->3->4頂點
  2. 下面->5->6->7->8頂點
  3. 後面->4->3->6->5頂點
  4. 右面->3->2->7->6頂點
  5. 前面->2->1->8->7頂點
  6. 左面->1->4->5->8頂點

頂點對應點座標

各頂點座標如下,其中x表示按照圖中頂點ID排序的情況下,各頂點的x座標,同理可得y,z座標向量,其中SL爲尺度,即長寬高。

x = 0.5*SL(1)*[-1 1 1 -1 -1 1 1 -1]';
y = 0.5*SL(2)*[1 1 1 1 -1 -1 -1 -1]';
z = 0.5*SL(3)*[-1 -1 1 1 1 1 -1 -1]';
verts = zeros(3,8);
for i = 1:8
    verts(1:3,i) = [x(i);y(i);z(i)];
end

最終代碼

SL = [1;1;1];
x = 0.5*SL(1)*[-1 1 1 -1 -1 1 1 -1]';
y = 0.5*SL(2)*[1 1 1 1 -1 -1 -1 -1]';
z = 0.5*SL(3)*[-1 -1 1 1 1 1 -1 -1]';

verts = zeros(3,8);
for i = 1:8
    verts(1:3,i) = [x(i);y(i);z(i)];
end

faces = [1 2 3 4
        5 6 7 8
        4 3 6 5
        3 2 7 6
        2 1 8 7
        1 4 5 8];
patch('Faces',faces,'Vertices',verts','FaceAlpha',0.1)    
view(3)

效果

呈現的效果如下:

  長方體的頂點定義如下圖所示,紅色編號爲頂點的編號。

  如果想要旋轉和移動,請移步博客:MATLAB——patch繪製長方體(cuboid)+長方體平移+長方體旋轉

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章