[英]3D Drawing using Matlab
我想使用MATLAB制作3D畫家。
首先,我要顯示3個面板XY
, XZ
和YZ
視圖。
用戶將在每個面板中繪制所需的內容。
之后,他將單擊按鈕來組合這3個視圖並從這些面板中獲得3d模型。 他還可以自由渲染此模型。
我怎樣才能做到這一點?
這些圖片說明了我想要的:
2D視圖:
合並3個視圖后的3D對象 :
我假設您只想指定3D線而沒有實體塊(如鏈接的示例中所示)。 我看到了一個小問題:指定XY和XZ投影后,曲線上每個點都有ax,y和z值,因此已經定義了YZ投影。 因此,僅指定XY和XZ尺寸就足夠了。 這樣做的方法如下:
要從用戶那里獲得圖形輸入,可以使用ginput
函數,該函數創建一個圖形並允許用戶選擇點:
[x,y,btn] = ginput(k);
其中x
和y
是所選點的坐標, 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
向量並內插所有y
和z
值來創建最終的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
抹平之前
平滑后:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.