%skript pro vypocet delek vesaku se zapoctenim vahy svorek
%vstupni udaje jsou zadany skriptem zadejkonst
%vystupnimi udaji jsou xnl, ynl (souradnice pro vykresleni NL)
%                      xves, yves (polohy a delky vesaku)
%                      n (pocet prvku matice xnl, ynl)
%v pripade PL navic    xplnl, yplnl (souradnice pro vykresleni PL a NL)
bocak=0.9;                               %vaha bocaku,co spociva na TD (kg) 0.9
ribe=0.32;                               %vaha RIBE svorky (kg) 0.32
lanicko=0.35;                            %vaha lanicka (kg)   0.35



%---------------------------------------%predpriprava potrebnych vektoru a matic
xnl=x;                                  %naplneni vektoru delek
xtd=x;
if xpl[0,0]~=0;
   xnl(1)=xpl(1);                      %je-li pridavak, delka pro NL odpovida delce pridavaku
   xnl(2)=x(1)+x(2)-xpl(1);
   xnl(n-2)=x(n-2)+x(n-1)-xpl(2);
   xnl(n-1)=xpl(2);
end

for a=2:n-1                             %naplneni matice Xnl
    Xnl(a,a-1)=1/xnl(a-1);
    Xnl(a,a)=-1/xnl(a-1)-1/xnl(a);
    Xnl(a,a+1)=1/xnl(a);
end
Xnl(2,1)=0;                             %vynulovani prvku nasobenych vyskou sestavy 
Xnl(n-1,n)=0;                           %protoze ynl(1), ynl(n) jsou zname=na prave strane rce

for a=2:n-1                             %naplneni matice vah NL
    Gnl(a)=mnl*(xnl(a-1)+xnl(a))/2;
    Gtd(a)=mtd*((xtd(a-1)+xtd(a))/2+lanicko);     %pripocteni vahy lanicek
end
Gtd(2)=Gtd(2)+mtd*(xtd(1)+bocak)/2;             %pro trolej je treba pripocist jeste usek u bocaku a pul bocaku
Gtd(n-1)=Gtd(n-1)+mtd*(xtd(n-1)+bocak)/2;
Gtd=Gtd*9.81;                           %tiha=vaha*g
Gnl=Gnl*9.81;
Gnl(2)=Gnl(2)-Fnl*ynl(1)/xnl(1);        %rozsireni prave strany rce o prvky nasobene
Gnl(n-1)=Gnl(n-1)-Fnl*ynl(n)/xnl(n-1);		%znamou vyskou sestavy

%-------------------------------------------------------vlastni vypocet
if xpl==[0,0]                           %---------------bez pridavaku
    G=(Gnl+Gtd)';                       %secteni vah a transpozice do sloupcoveho
    G(1)=[];                            %zruseni prvku pro n=1;
    Xnl=Xnl(2:n-1,2:n-1).*Fnl;          %orezani nepotrebnych okraju z matice Xnl
    y=Xnl\G;                   %delky vesaku
else                                    %---------------s pridavakem
    G(1)=Gtd(2)+9.81*mpl*(xtd(1)+xnl(1))/2;            %prvni prvek - tiha troleje+kus pridavaku
    G(2)=Gnl(2)+9.81*(mpl*(xnl(1)-xtd(1))/2+ribe);     %druhy prvek - tiha lana+kousek pridavaku+RIBE svorky
    G(3:n-2)=Gtd(3:n-2)+Gnl(3:n-2);                    %dalsi prvky - tiha lana+troleje
    G(n-1)=Gnl(n-1)+9.81*(mpl*(xnl(n-1)-xtd(n-1))/2+ribe);
    G(n)=Gtd(n-1)+9.81*mpl*(xtd(n-1)+xnl(n-1))/2;
    G=G';                               %transpozice do sloupcoveho

    Xnl(n,n)=0;                         %rozsireni matice Xnl na n*n
    Xnl=Xnl.*Fnl;                       %sily vyvozuje NL
    
    Xtd=zeros(n);
    pom=1/(xnl(1)-xtd(1));              %vytvoreni matice Xtd
    Xtd(1:2,1:2)=[-pom, pom; pom, -pom];
    pom=1/(xnl(n-1)-xtd(n-1));
    Xtd(n-1:n, n-1:n)=[-pom, pom; pom, -pom];
    Xtd=Xtd.*Fpl;                       %sily vyvozuje PL
    X=Xtd+Xnl;                          %slouceni obou matic
    y=X\G;
    clear Xtd X
end
clear G Gtd Gnl Xnl

%----------------------------------------konecne zpracovani
pom=0;
for a=1:n-1;
   pom(a+1)=pom(a)+xnl(a);
end
xnl=pom;								%kumulativni odlehlost pro prubeh NL

if xpl==[0,0];                  %bez pridavaku
   ynl(2:n-1)=y;					%svisla pozice pro NL
   xves=xnl(2:n-1);				%kumulativni odlehlost pro vesaky
   yves=ynl(2:n-1);				%delka vesaku
   
else                            %s pridavakem
   ynl(2:n-1)=y(2:n-1);			%svisla pozice pro NL, pokud je PL
   yplnl(1)=y(1);
   yplnl(2:n+1)=y;
   yplnl(n+2)=y(n);				%svisla pozice pro PL a NL
   pom(3:n)=xnl(2:n-1);
	pom(1)=0;
	pom(2)=xtd(1);
	pom(n+1)=xnl(n)-xtd(n-1);
	pom(n+2)=xnl(n);
   xplnl=pom;						%kumulativni odlehlost pro PL+NL
   clear pom;
   xves=[xplnl(2),xplnl(4:n-1),xplnl(n+1)];	%kumulativni odlehlost pro vesaky
   yves=[yplnl(2),yplnl(4:n-1),yplnl(n+1)];  %delka vesaku
end

   
   
   
    