%% Funzione che calcola i segmenti della stella
function SegStar = CalcoloStar(X_TuL,Z_TuL,Xstar_TuL,Zstar_TuL,Verso,Segmenti,Peso,jj,SegStar,Nnodi,dim)

for J = 1:dim
   N1 = Segmenti(J,1); % Numero primo punto
   N1b = Segmenti(J,2); % Numero primo punto b
   C1 = isnan(Segmenti(J,2)); % cerco se la seconda colonna è un NaN
   N2 = Segmenti(J,3); % Numero secondo punto
   [~,chc] = size(Segmenti);
   if chc == 3 % non c'è la quarta colonna
       C2 = 1;
   else
        N2b = Segmenti(J,4); % Numero secondo punto b
        C2 = isnan(Segmenti(J,4)); % cerco se la quarta colonna è un NaN
   end
   X1 = X_TuL;
   Xstar1 = Xstar_TuL;
   Z1 = Z_TuL;
   Zstar1 = Zstar_TuL;
   X2 = X_TuL;
   Xstar2 = Xstar_TuL;
   Z2 = Z_TuL;
   Zstar2 = Zstar_TuL;
   
   if C1 == 0 % uso la media fra due nodi per il punto di inizio
       X1(N1,jj) = (X_TuL(N1,jj) + X_TuL(N1b,jj))/2;
       Z1(N1,jj) = (Z_TuL(N1,jj) + Z_TuL(N1b,jj))/2;
       Xstar1(Nnodi-N1,jj) = (Xstar_TuL(Nnodi-N1,jj) + Xstar_TuL(Nnodi-N1b,jj))/2;
       Zstar1(Nnodi-N1,jj) = (Zstar_TuL(Nnodi-N1,jj) + Zstar_TuL(Nnodi-N1b,jj))/2;
   end 
   if C2 == 0 % uso la media fra due nodi per il punto di arrivo
       X2(N2,jj) = (X_TuL(N2,jj) + X_TuL(N2b,jj))/2;
       Z2(N2,jj) = (Z_TuL(N2,jj) + Z_TuL(N2b,jj))/2;
       Xstar2(Nnodi-N2,jj) = (Xstar_TuL(Nnodi-N2,jj) + Xstar_TuL(Nnodi-N2b,jj))/2;
       Zstar2(Nnodi-N2,jj) = (Zstar_TuL(Nnodi-N2,jj) + Zstar_TuL(Nnodi-N2b,jj))/2;
   end
   
   if Verso(J,1) == 1 && Verso (J,2) == 1 % Calcolo Orario per entrambi i punti (standard)
       if N1==0
           SegStar(J,jj) = real(((0 - X2(N2,jj)).^2+(0-Z2(N2,jj)).^2).^0.5);
       elseif N2==0
           SegStar(J,jj) = real((((X1(N1,jj)- 0)).^2+(Z1(N1,jj)-0).^2).^0.5);
       else
           SegStar(J,jj) = real(((X1(N1,jj)- X2(N2,jj)).^2+(Z1(N1,jj)-Z2(N2,jj)).^2).^0.5);
       end
   elseif Verso(J,1) == 1 && Verso (J,2) == -1 % Calcolo Orario il primo, antiorario per il secondo punto
          SegStar(J,jj) = real(((X1(N1,jj)-Xstar2(Nnodi-N2,jj)).^2+(Z1(N1,jj)-Zstar2(Nnodi-N2,jj)).^2).^0.5);
   elseif Verso(J,1) == 1 && Verso (J,2) == 0 % Calcolo Orario il primo, media fra orario e antiorario per il secondo punto
          Peso3 = Peso(J,3);
          Peso4 = Peso(J,4);
          Xmedium2 = (Peso3*X2(N2,jj) + Peso4*Xstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          Zmedium2 = (Peso3*Z2(N2,jj) + Peso4*Zstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          SegStar(J,jj) = real(((X1(N1,jj)-Xmedium2).^2+(Z1(N1,jj)-Zmedium2).^2).^0.5);
   elseif Verso(J,1) == -1 && Verso (J,2) == -1 % Calcolo antiorario per entrambi
          SegStar(J,jj) = real(((Xstar1(Nnodi-N1,jj)-Xstar2(Nnodi-N2,jj)).^2+(Zstar1(Nnodi-N1,jj)-Zstar2(Nnodi-N2,jj)).^2).^0.5);
   elseif Verso(J,1) == -1 && Verso (J,2) == 1 % Calcolo antiorario per il primo, orario per il secondo
          SegStar(J,jj) = real(((X2(N2,jj)-Xstar1(Nnodi-N1,jj)).^2+(Z2(N2,jj)-Zstar1(Nnodi-N1,jj)).^2).^0.5);
   elseif Verso(J,1) == -1 && Verso (J,2) == 0 % Calcolo antiorario il primo, media fra orario e antiorario per il secondo punto
          Peso3 = Peso(J,3);
          Peso4 = Peso(J,4);
          Xmedium2 = (Peso3*X2(N2,jj) + Peso4*Xstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          Zmedium2 = (Peso3*Z2(N2,jj) + Peso4*Zstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          SegStar(J,jj) = real(((Xstar1(Nnodi-N1,jj)-Xmedium2).^2+(Zstar1(Nnodi-N1,jj)-Zmedium2).^2).^0.5);
   elseif Verso(J,1) == 0 && Verso (J,2) == 0 % Calcolo media fra orario e antiorario per entrambi
          Peso1 = Peso(J,1);
          Peso2 = Peso(J,2);
          Peso3 = Peso(J,3);
          Peso4 = Peso(J,4);
          Xmedium1 = (Peso1*X1(N1,jj) + Peso2*Xstar1(Nnodi-N1,jj))/(Peso1+Peso2);
          Xmedium2 = (Peso3*X2(N2,jj) + Peso4*Xstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          Zmedium1 = (Peso1*Z1(N1,jj) + Peso2*Zstar1(Nnodi-N1,jj))/(Peso1+Peso2);
          Zmedium2 = (Peso3*Z2(N2,jj) + Peso4*Zstar2(Nnodi-N2,jj))/(Peso3+Peso4);
          SegStar(J,jj) = real(((Xmedium1-Xmedium2).^2+(Zmedium1-Zmedium2).^2).^0.5);
   elseif Verso(J,1) == 0 && Verso (J,2) == 1 % Calcolo media fra orario e antiorario per il primo, orario per il secondo
          Peso1 = Peso(J,1);
          Peso2 = Peso(J,2);
          Xmedium1 = (Peso1*X1(N1,jj) + Peso2*Xstar1(Nnodi-N1,jj))/(Peso1+Peso2);
          Zmedium1 = (Peso1*Z_TuL(N1,jj) + Peso2*Zstar_TuL(Nnodi-N1,jj))/(Peso1+Peso2);
          SegStar(J,jj) = real(((X2(N2,jj)-Xmedium1).^2+(Z2(N1,jj)-Zmedium1).^2).^0.5);
   elseif Verso(J,1) == 0 && Verso (J,2) == -1 % Calcolo media fra orario e antiorario per il primo, antiorario per il secondo
          Peso1 = Peso(J,1);
          Peso2 = Peso(J,2);
          Xmedium1 = (Peso1*X1(N1,jj) + Peso2*Xstar1(Nnodi-N1,jj))/(Peso1+Peso2);
          Zmedium1 = (Peso1*Z1(N1,jj) + Peso2*Zstar1(Nnodi-N1,jj))/(Peso1+Peso2);
          SegStar(J,jj) = real(((Xstar2(Nnodi-N2,jj)-Xmedium1).^2+(Zstar2(Nnodi-N2,jj)-Zmedium1).^2).^0.5);
   end
end
end
