2015-06-28 39 views
0

厚度函數我有定義爲 enter image description here實現指定MATLAB

厚度函數是一個函數,當h(x)= 1兩個表面之間的距離是 在可接受的範圍內[d+f D-f],否則h(x)= 0; D,d和f是常量。 xphi矩陣中的一個值。而作爲

enter image description here

鑑於d,D,f and phi其他功能,c定義。如何通過matlab計算h(phi)和c(phi)?我想展示我的實施。你能看到並給我一些評論嗎?由於

function h=compute_h(phi) 
    d=1;D=5;f=1; 
    h=zeros(size(phi)); 
    idx1=find(phi<=d&phi>D); 
    idx2=find(phi>(d+f)&phi<(D-f)); 
    idx3=find(phi>d&phi<=(d+f)); 
    idx4=find(phi>(D-f)&phi<=D); 

    h(idx1)=0; 
    h(idx2)=1; 
    h(idx3)=1-((phi(idx3)-d-f)./f).^2; 
    h(idx4)=1-((phi(idx4)-D+f)./f).^2;  
end 
%% Defined phi 
[Height Wide] = size(Img);% Assume size Img is 11 by 11 
[xx yy] = meshgrid(1:Wide,1:Height); 
phi = (sqrt(((xx - 3).^2 + (yy - 3).^2)) - 3); 
c=(1-compute_h(abs(phi)).*sign(phi).*sign(abs(phi)-D+f) 

回答

2

看起來你是在正確的軌道上。雖然你不需要使用find

function C = StackOverflow(Img, d, D, f) 
    [Height, Width] = size(Img);% Assume size Img is 11 by 11 
    [xx, yy] = meshgrid(1:Width,1:Height); 
    phi = (sqrt(((xx - 3).^2 + (yy - 3).^2)) - 3); 
    C = c(phi, d, D, f); 
end 

function H = h(x, d, D, f) 
    H = zeros(size(x)); 

    c1 = (d + f < x) & (x < D - f); 
    c2 = (d < x) & (x <= d + f); 
    c3 = (D - f <= x) & (x <= D); 

    H(c1) = 1; 
    H(c2) = 1 - ((x(c2) - d - f)/(f)).^2; 
    H(c3) = 1 - ((x(c3) - D - f)/(f)).^2; 

end 

function C = c(phi, d, D, f) 
    c1 = (abs(phi) >= D - f); 
    c2 = (abs(phi) <= d + f); 

    C = zeros(size(phi)); 
    C(c1) = (1 - h(abs(phi(c1)), d, D, f)) .* (sign(phi(c1))); 
    C(c2) = (1 - h(abs(phi(c1)), d, D, f)) .* (-sign(phi(c2))); 
end 
+0

我創建了一個MATLAB聊天室爲我們討論事情MATLAB相關,或討論跨越超出了單個評論的侷限性。有空的時候請訪問我們! - http://chat.stackoverflow.com/rooms/81987/matlab – rayryeng