3D填充线图

时间:2014-02-21 10:38:47

标签: matlab

我有一个接触位置矩阵,这些位置是线性的,因此我可以很容易地在MATLAB中绘制接触位置,并得出x行数。目前我正在2D图中绘图。

for j= 1:5
    for k= 1:20
       Yijk(j,:,k)=x*tan_helix+one_array*(k-P)*Pb/P+one_array*(j-(L+1)/2)*Pb;
    end
end 

x_axis = linspace(0,b*1000, N+1);

figure;
for j=1:zPairs;
 hold on
 plot(x_axis,Yijk(j,:,k))
 hold off 
end

以上只是大型编码的一小部分,因此所有变量和参数都在其他地方说明。

以下是使用2D图表创建的图表:

http://oi58.tinypic.com/20p8rpi.jpg

我想要做的是绘制对应于这些位置中的每一个的对应接触,仅在位置处发生接触> 0因此仅沿着上面绘制的线出现。因此,情节需要采用3D格式,我假设最初会绘制线条,然后是contact_force,然后是填充命令 - 但我可能错了。

我的目标是创建类似于:

http://oi62.tinypic.com/2vwyzdk.jpg

如果任何人有任何指导或提示,我将非常感激,因为我无处可去。

请注意,contact_force也是与联系人位置尺寸相同的矩阵。


 for j = 1:zPairs

    Xx = linspace(0,b*1000,N+1);
    Yy = Yijk(j,:,1);
    n = length(Xx);
    Zz = contact_force(j,:,1);

    Xp = zeros(2*n,1);
    Yp = zeros(2*n,1);

    Xp(1:N+1) = Xx;
    Xp(N+2:2*(N+1)) = Xx(N+1:-1:1);
    Yp(1:N+1) = Yy;
    Yp(N+2:2*(N+1)) = Yy(N+1:-1:1);
    Zp(1:N+1) = 0;
    Zp(N+2:2*(N+1)) = Zz(N+1:-1:1);

    figure(12);
      hold on
      patch(Xp,Yp,Zp,'c');
      title('Zone of Contact');
      hold off

 end 

上面的代码效果很好,但只创建了一个图(j,:,1)。我想改变它,因为它是(j,:,k)和k数量的图形创建。我该如何设置这个for循环?

1 个答案:

答案 0 :(得分:1)

我写了一些MATLAB代码来测试它。该程序在2D线的顶部创建一个多边形。您正在寻找fill3patch个功能。

a = 2;
b = 1;

X = 0:10;
Y = a*X + b;
n = length(X);
Z = rand(n,1)*2+1;

Xp = zeros(2*n,1);
Yp = zeros(2*n,1);

Xp(1:n) = X;
Xp(n+1:2*n) = X(n:-1:1);
Yp(1:n) = Y;
Yp(n+1:2*n) = Y(n:-1:1);
Zp(1:n) = 0;
Zp(n+1:2*n) = Z(n:-1:1);

fill3(Xp,Yp,Zp,'c');