% Stabkraefte eines 2D-Fachwerks
function sk = Stabkraefte2D (xy , km , ep , uv)

[ne,n] = size  (km)   ;       % Koinzidenzmatrix km mit Zeilenanzahl ne (Anzahl
sk     = zeros (ne,1) ;       % der Staebe) und Spaltenanzahl n (Knoten pro Stab)
uvelem = zeros (4 ,1) ;       % uvelem und kkelem nehmen fuer ein Element die 
kkelem = zeros (4 ,1) ;       % Verschiebungen und die Knotenkraefte auf

midsk = 0 ;
for i=1:ne                                    % Schleife ueber alle Elemente (Staebe)
   em = elemat_m (i , 2 , xy , km , ep) ;     % Elementsteifigkeitsmatrix
   k1 = km (i,1) ;                            % Nummern der ...
   k2 = km (i,2) ;                            % ...  Elementknoten
   uvelem (1:2) = uv (k1,:) ;                 % Vektor der Verschiebungen
   uvelem (3:4) = uv (k2,:) ;                 % ... der beiden Elementknoten
   kkelem = em*uvelem ;                       % Element-Knotenkräfte
   sl = sqrt ((xy(k2,1)-xy(k1,1))^2+(xy(k2,2)-xy(k1,2))^2) ;  % Stablaenge
   sk (i) = (kkelem(3)*(xy(k2,1)-xy(k1,1)) + kkelem(4)*(xy(k2,2)-xy(k1,2))) / sl ;
   midsk = midsk + abs(sk (i)) ;              % sk(i) ist die Stabkraft des Stabs i    
end

midsk = midsk / ne ;                  % Mittel der Absolutwerte aller Stabkraefte
for i=1:ne
    if abs(sk(i)) < midsk * 1.e-8     % Wenn Stabkraft deutlich kleiner ist als der
        sk (i) = 0 ;                  % Mittelwert aller Stabkraefte --> Nullstab
    end
end