我試圖將在 Matlab 上創建的這個形狀匯出到一個 .stl 檔案,我在 Mathworks File Exchange 中遇到了“surf2stl”。( https://mathworks.com/matlabcentral/fileexchange/4512-surf2stl )
function out=fun2(x,y,z)
fun1=@(x,y,z) (x.^2 y.^2).^(2)-(x.^3 y.^3).*(z/4-z.^2).^(1/2);
dt=0.25*(z/4-z.^2).^(1/2); %z-dependent translation
out=fun1(x dt,y dt,z);
end
同時,使用 surf2stl 的一個簡單示例是:
x=linspace(0,2)
y=linspace(-pi,pi)
[X,Y] = meshgrid(x,y);
Z=sqrt(X).*cos(Y);
surf2stl('fun.stl', X, Y, Z);
問題是我的代碼在 X、Y 和 Z 之間有一個隱式函式,另外還有一個依賴于 z 的平移來移動 x 和 y 坐標,所以將這個函式實作到 surf2stl 可能很棘手。我不知道如何處理這個問題。有什么想法嗎?
(R2021a)
uj5u.com熱心網友回復:
請注意,surf2stl僅適用于已在規則矩形網格上采樣的引數化表面。你可以stlwrite改用。但是要從隱式函式創建表面,我們首先需要在網格上對函式進行采樣(首先使用 來創建網格meshgrid),然后呼叫isosurface。然后stlwrite需要一個三角剖分物件,我們可以使用triangulation.
% define function
fun1=@(x,y,z) (x.^2 y.^2).^2-(x.^3 y.^3).*(z/4-z.^2).^(1/2);
dt=@(z)0.25*(z/4-z.^2).^(1/2);
helper=@(x,y,z,dt)fun1(x dt, y dt, z);
fun=@(x,y,z)helper(x,y,z,dt(z));
% code
[x,y,z] = meshgrid(linspace(-3, 3, 40));
v = fun(x,y,z);
v = real(v); % deal with complex values
[faces, verts] = isosurface(x,y,z,v,0);
t = triangulation(faces, verts);
stlwrite(t, 'test.stl');
disp('done');
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/361472.html
標籤:MATLAB
上一篇:在MATLAB上創建方形網格時如何消除“魚缸”效應?
下一篇:SEOURL和重寫規則強制一個域
