簡體   English   中英

使用Matlab進行3D繪圖

[英]3D Drawing using Matlab

我想使用MATLAB制作3D畫家。

首先,我要顯示3個面板XYXZYZ視圖。

用戶將在每個面板中繪制所需的內容。

之后,他將單擊按鈕來組合這3個視圖並從這些面板中獲得3d模型。 他還可以自由渲染此模型。

我怎樣才能做到這一點?

這些圖片說明了我想要的:

2D視圖:
2D視圖

合並3個視圖后的3D對象
3D物件

我假設您只想指定3D線而沒有實體塊(如鏈接的示例中所示)。 我看到了一個小問題:指定XY和XZ投影后,曲線上每個點都有ax,y和z值,因此已經定義了YZ投影。 因此,僅指定XY和XZ尺寸就足夠了。 這樣做的方法如下:

要從用戶那里獲得圖形輸入,可以使用ginput函數,該函數創建一個圖形並允許用戶選擇點:

[x,y,btn] = ginput(k);

其中xy是所選點的坐標, btn是任何單擊的按鈕的ASCII代碼,而k是要獲取的點數。 您可以通過按空格鍵讓用戶畫一些東西並結束繪圖:

figure; axis([0 1 0 1]);              % create empty figure
button=0; k=1;                        % set start values
while button~=' '                     % repeat until space is pressed
    [x(k) y(k), button] = ginput(1);  % get one point
    k=k+1;                            % set k for next iteration
    plot(x,y);axis([0 1 0 1]);        % plot the curve
end

您可以重復兩次以獲取XY和XZ視圖。 假設您將坐標保存到變量中

(x1, y1)    % the XY view
(x2, z2)    % the XZ view

現在,您可以通過創建x向量並內插所有yz值來創建最終的3D曲線。 為了獲得良好的平滑曲線,我建議使用樣條插值:

x = 0:0.01:1;
y = interp1(x1,y1,x,'spline','extrap');    % Spline interpolation + extrapolation
z = interp1(x2,z2,x,'spline','extrap');    % Spline interpolation + extrapolation

現在只需使用plot3函數以3D形式繪制它:

plot3(x,y,z);

您可以輕松地擴展此最小示例以執行所需的任何操作,這只是為了展示MATLAB中的基本步驟和可能性。

這可能不是一個完整的答案,但是可以將其與hbaderts答案一起添加

在繪制時生成平滑的樣條線,而不是直線(如他所建議的)

figure; axis([0 1 0 1]);                    % create empty figure
button=0; k=1;
while button~=' '                           % repeat until space is pressed
    [x(k) y(k), button] = ginput(1);        % get one point                            
    plot(x(k),y(k),'r.');axis([0 1 0 1]);   % plot the points
    hold on
    fnplt(cscvn(vertcat(x,y)),'b',2);       % Generate smooth spline
    hold off
    k=k+1;                                  % set k for next iteration
end

抹平之前

hbaderts圖片

平滑后:

平滑曲線

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM