我有一个接触位置矩阵,这些位置是线性的,因此我可以很容易地在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循环?
答案 0 :(得分:1)
我写了一些MATLAB代码来测试它。该程序在2D线的顶部创建一个多边形。您正在寻找fill3
或patch
个功能。
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');