Advertisement
Tertius

Atividade 02

Aug 16th, 2019
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.77 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #define M_PI           3.14159265358979323846
  5.  
  6. void aceleracao(float a[3], float v[3], float w[3])
  7. {
  8.     float g = -9.8;
  9.     float Cd = 0.006;
  10.     float Cm = 0.0004;
  11.     float modulo_v = 0;
  12.  
  13.     modulo_v = sqrt(v[0]*v[0] + v[1]*v[1] + v[2]*v[2]);
  14.  
  15.     a[0] =  -(Cd*modulo_v*v[0]) + Cm*(w[1]*v[2] - w[2]*v[1]);
  16.     a[1] = g - Cd*modulo_v*v[1] + Cm*(w[2]*v[0] - w[0]*v[2]);
  17.     a[2] = -(Cd*modulo_v*v[2]) + Cm*(w[0]*v[1] - w[1]*v[0]);
  18. }
  19.  
  20. void trajetoria(float w[3], int m, float angulo, double modulo_v)
  21. {
  22.     int i, j, k;
  23.     float dt = 0.001;
  24.     float a[3] = {0, 0, 0};
  25.     float v[3] = {0, 0, 0};
  26.     float x[3] = {0, 0, 0}; // vetor posição
  27.     FILE *dados;
  28.     char nome[12];
  29.  
  30.     sprintf(nome, "posição-w%d.txt", m);
  31.     v[0] = modulo_v*cos(angulo);
  32.     v[1] = modulo_v*sin(angulo);
  33.     dados = fopen(nome, "w+");
  34.  
  35.     for(i = 0; i <= 30000; i++)
  36.     {
  37.         for(j = 0; j <= 2; j++)
  38.         {
  39.             fprintf(dados, " %f\t", x[j]);
  40.             if(k == 1)  // atualiza o valor da aceleração nas 3 coordenadas e nao deixa mais atualizar durante esse loop
  41.             {
  42.                 aceleracao(a, v, w);
  43.                 k = 0;
  44.             }
  45.            v[j] = v[j] + a[j]*dt;
  46.            x[j] = x[j] + v[j]*dt;
  47.         }
  48.         fprintf(dados, "\n");
  49.         k = 1;
  50.     }
  51.     fclose(dados);
  52. }
  53.  
  54. int main()
  55. {
  56.     float w1[3] = {0, 0, 0};
  57.     float w2[3] = {0, -10, 0};
  58.     float w3[3] = {0, 10, 0};
  59.     float w4[3] = {0, 0 , 10};
  60.     double angulo = M_PI/4;
  61.     float modulo_v = 10*sqrt(2);
  62.  
  63.     trajetoria(w1, 1, angulo, modulo_v);
  64.     trajetoria(w2, 2, angulo, modulo_v);
  65.     trajetoria(w3, 3, angulo, modulo_v);
  66.     trajetoria(w4, 4, angulo, modulo_v);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement