Advertisement
Guest User

Untitled

a guest
May 30th, 2015
244
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include "winbgi2.h"
  4. #define MAXN 10
  5.  
  6. double spadek(double t, double V);
  7. void spadekotwarty(double t, double y[], double f[]);
  8. void vrk4(double x0, double y0[], double h, int n, void(*fun)(double, double*, double*), double y1[]);
  9.  
  10. double Cd, S, ro, m, g;
  11.  
  12. void main()
  13. {
  14. double V, t, t0, Vpocz, dt, tk, H;
  15. double x1, y1;
  16. double y0[2], y[2];
  17.  
  18. g = 9.81; S = 11; ro = 1.225; Cd = 0.3; m = 100.;// dane fizyczne
  19.  
  20. graphics(800, 600);
  21.  
  22. scanf("%lf", &tk); t0 = .0;
  23. Vpocz = 0;
  24. dt = 0.01;
  25. scanf("%lf", &H);
  26.  
  27.  
  28. scale(0, -H/3, 300, H+100);
  29. for (int i = 10; i >= 0; i--) line(tk * (i - 0.25) / 10, 0., tk * (i + 0.25) / 10, 0.);
  30. // warunki poczatkowe
  31. t = t0;
  32. y0[0] = H;
  33. y0[1] = Vpocz;
  34. //calkowanie
  35. while (y0[0]>=0)
  36. {
  37. vrk4(t, y0, dt, 2, spadekotwarty, y);
  38. t = t + dt;
  39. y0[0] = y[0];
  40. y0[1] = y[1];
  41. printf("t=%lf V=%lf h=%lf\n", t, y[1], y[0]);
  42. setcolor(1.0); circle(t, y[0], 1); // czerwone - H WYSOKOSC
  43. setcolor(0.1); circle(t, y[1], 1); // niebieskie - V PREDKOSC
  44. }
  45.  
  46. wait();
  47. }
  48.  
  49.  
  50. double spadek(double t, double V)
  51. {
  52. double f;
  53. if (V>0) f = -g - ro*S*Cd / 2 / m*V*V;
  54. else f = -g + ro*S*Cd / 2 / m*V*V;
  55. return f;
  56. }
  57.  
  58. void spadekotwarty(double t, double y[], double f[])
  59. {
  60. f[0] = y[1];
  61. f[1] = -g - ro*S*Cd / (2 * m) * y[1] * fabs(y[1]);
  62.  
  63. }
  64.  
  65. void vrk4(double x0, double y0[], double h, int n, void(*fun)(double, double*, double*), double y1[])
  66. {
  67. //double MAXN;
  68. int i;
  69. double k1[MAXN], k2[MAXN], k3[MAXN], k4[MAXN];
  70. double ytmp[MAXN];
  71.  
  72. fun(x0, y0, k1);
  73. for (i = 0; i<n; ++i)
  74. {
  75. k1[i] *= h;
  76. ytmp[i] = y0[i] + k1[i] / 2.0;
  77. }
  78.  
  79. fun(x0 + h / 2.0, ytmp, k2);
  80. for (i = 0; i<n; ++i)
  81. {
  82. k2[i] *= h;
  83. ytmp[i] = y0[i] + k2[i] / 2.0;
  84. }
  85.  
  86. fun(x0 + h / 2.0, ytmp, k3);
  87. for (i = 0; i<n; ++i)
  88. {
  89. k3[i] *= h;
  90. ytmp[i] = y0[i] + k3[i];
  91. }
  92.  
  93. fun(x0 + h, ytmp, k4);
  94. for (i = 0; i<n; ++i)
  95. k4[i] *= h;
  96.  
  97. for (i = 0; i<n; ++i)
  98. y1[i] = y0[i] + (k1[i] + 2.*k2[i] + 2.*k3[i] + k4[i]) / 6.;
  99.  
  100. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement