Problem ze zrozumieniem napisanego kodu

0

Witam!
Mam problem ze zrozumieniem kodu programu.
Program to powiewająca flaga na wietrze.
Flaga zbudowana jest z systemu punktów materialnych znajdujących się w tablicy dwuwskaźnikowej.
Punkty połączone są ze sobą sprężynami pionowymi, ukośnymi i poziomymi.
Rozumiem, że dla każdego rodzaju punktów (brzegowych, narożnych i środkowych) obliczana jest suma sił sprężystości działających na dany punkt.
Nie rozumiem natomiast na jakiej zasadzie obliczana jest siła parcia wiatru.

Fragment kodu:

for(int i = 0; i <= a; i++)
{
for(int j = 0; j <= b; j++)
{
if((i==a) && (j==0))
{
Fx[i][j]=-Fx1[i-1][j]+Fx2[i][j]-Fx4[i-1][j+1];//suma sił reakcji działających na punkt
Fy[i][j]=-Fy1[i-1][j]+Fy2[i][j]-Fy4[i-1][j+1];
Fz[i][j]=-Fz1[i-1][j]+Fz2[i][j]-Fz4[i-1][j+1];

           a1=ax[i][j+1]-ax[i][j];
           a2=ax[i-1][j]-ax[i][j];
           b1=ay[i][j+1]-ay[i][j];
           b2=ay[i-1][j]-ay[i][j]; 
           c1=az[i][j+1]-az[i][j];
           c2=az[i-1][j]-az[i][j];

           norx=(b1*c2)-(b2*c1);// wyliczenie współrzednych iloczynu wektorowego
           nory=(c1*a2)-(c2*a1); 
           norz=(a1*b2)-(a2*b1);

           wiatrx[i][j]=norx*norx*wiatrX/sqrt((norx*norx)+(nory*nory)+(norz*norz));
           wiatry[i][j]=nory*nory*wiatrY/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
           wiatrz[i][j]=norz*norz*wiatrZ/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
           }
            else 
               if((i==a) && (j==b))
                 {
                  Fx[i][j]=-(Fx1[i-1][j]+Fx2[i][j-1]+Fx3[i-1][j-1]);
                  Fy[i][j]=-(Fy1[i-1][j]+Fy2[i][j-1]+Fy3[i-1][j-1]); 
                  Fz[i][j]=-(Fz1[i-1][j]+Fz2[i][j-1]+Fz3[i-1][j-1]);

                  a1=ax[i-1][j]-ax[i][j];//współrzędne wektorów
                  a2=ax[i][j-1]-ax[i][j];// z których liczony jest iloczyn wektorowy
                  b1=ay[i-1][j]-ay[i][j];
                  b2=ay[i][j-1]-ay[i][j]; 
                  c1=az[i-1][j]-az[i][j];
                  c2=az[i][j-1]-az[i][j];

                  norx=(b1*c2)-(b2*c1);// wyliczenie współrzednych iloczynu wektorowego
                  nory=(c1*a2)-(c2*a1);
                  norz=(a1*b2)-(a2*b1);

                  wiatrx[i][j]=norx*norx*wiatrX/sqrt((norx*norx)+(nory*nory)+(norz*norz));
                  wiatry[i][j]=nory*nory*wiatrY/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
                  wiatrz[i][j]=norz*norz*wiatrZ/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
                }

if ( wiatr = 0)//obliczanie wiatru jesli wieje
{
kat+=0.02;

    for(int i = 0; i<=  a; i++) 
   {
      for(int j = 0; j <= b; j++) 
           wiatrX=0.01*cos(kat); 
          wiatrZ=0.001*sin(kat); 
   }[/code]

Dodatkowo podana jest obliczona siła wiatru. Zadeklarowany wcześniej kat = 0.
Flaga zbudowana jest z trójkątów.
Proszę o wyjaśnienie w jaki sposób obliczany jest wiatrx? Z fizycznego punktu widzenia.

0

Ten kod jest napisany tak, by się go źle czytało. Skąd mamy wiedzieć czym się różnią: Fx1, Fx2, Fx3, Fx4 (itp)? Zapewne chodzi tu o siły, ale rozszyfrowanie o jakie jest chyba niemożliwe (z tego fragmentu kodu).
Do tego zagnieżdżenie pętli, wygląda na to, że ostatnie 2 for-y siedzą wewnątrz 2 pierwszych, czemu nie wiadomo. na dodatek ostatnie 3 linijki są bez sensu, bo nie widać zależności od "i" i "j", więc po co to w ogóle jest wewnątrz pętli for.
Nie mam ochoty na ból głowy, więc nie będę próbował rozszyfrowywać, co autor miał na myśli.

0

Fx1, Fx2 itp to są siły sprężystości, które są "przy okazji" w kodzie, ale jak już napisałem, wiem o co tu chodzi. Nie mają one związku z obliczanym parciem wiatru.
Ostatnie linijki z siła wiatru jest to również oddzielny kawałek kodu - tu mój błąd mogłem to wyraźniej zaznaczyć.
Chodzi o tę część:
a1=ax[i-1][j]-ax[i][j];//współrzędne wektorów
a2=ax[i][j-1]-ax[i][j];// z których liczony jest iloczyn wektorowy
b1=ay[i-1][j]-ay[i][j];
b2=ay[i][j-1]-ay[i][j];
c1=az[i-1][j]-az[i][j];
c2=az[i][j-1]-az[i][j];

                  norx=(b1*c2)-(b2*c1);// wyliczenie współrzednych iloczynu wektorowego
                  nory=(c1*a2)-(c2*a1);
                  norz=(a1*b2)-(a2*b1);

                  wiatrx[i][j]=norx*norx*wiatrX/sqrt((norx*norx)+(nory*nory)+(norz*norz));
                  wiatry[i][j]=nory*nory*wiatrY/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
                  wiatrz[i][j]=norz*norz*wiatrZ/sqrt((norx*norx)+(nory*nory)+(norz*norz)); 
                }[/code]

Jak opisać zasadę działania tego kodu?

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0