Problem ze zrozumieniem napisanego kodu

Odpowiedz Nowy wątek
2011-09-16 03:32
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:
[code]
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.

edytowany 1x, ostatnio: liberte, 2011-09-16 03:35

Pozostało 580 znaków

2011-09-16 09:50
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.


Jeśli chcesz pomocy, NIE pisz na priva, ale zadaj dobre pytanie na forum.

Pozostało 580 znaków

2011-09-16 14:46
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ęść:[code]
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?

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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