2014-02-21 21 views
0

У меня есть матрица для контактных позиций, и эти положения являются линейными, поэтому я могу легко построить контактные позиции в MATLAB и выйти с количеством строк x. На данный момент я рисую в 2D-графике.3D-заполненный график линии

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

То, что я хочу сделать, это Постройте correspoding контакт с каждой из этих позиций, контакт происходит только в положениях> 0 и, следовательно, будет происходить только вдоль линий, построенных выше. Поэтому график должен быть в трехмерном формате, и я предполагаю, что строки будут построены изначально, затем contact_force, а затем команда заполнения как таковая, но я могу ошибаться.

Что я стремлюсь создать нечто похожее на:

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

Если кто имеет какие-либо указания или советы будет высоко оценили как я не подвожу нигде.

Обратите внимание, что контакт_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 

Приведенный выше код работает, но только создает один граф, как для (у,:, 1). Я хотел бы изменить это так, чтобы он был создан для (j,:, k) и k числа графиков. Как мне настроить этот цикл?

ответ

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'); 
+0

Пробовал эту команду (см. Править), но, к сожалению, только что получил контактные линии в 3d-оси – user3190506

Смежные вопросы