Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <math.h>
- #include "winbgi2.h"
- #define MAXN 10
- double spadek(double t, double V);
- void spadekotwarty(double t, double y[], double f[]);
- void vrk4(double x0, double y0[], double h, int n, void(*fun)(double, double*, double*), double y1[]);
- double Cd, S, ro, m, g;
- void main()
- {
- double V, t, t0, Vpocz, dt, tk, H;
- double x1, y1;
- double y0[2], y[2];
- g = 9.81; S = 11; ro = 1.225; Cd = 0.3; m = 100.;// dane fizyczne
- graphics(800, 600);
- scanf("%lf", &tk); t0 = .0;
- Vpocz = 0;
- dt = 0.01;
- scanf("%lf", &H);
- scale(0, -H/3, 300, H+100);
- for (int i = 10; i >= 0; i--) line(tk * (i - 0.25) / 10, 0., tk * (i + 0.25) / 10, 0.);
- // warunki poczatkowe
- t = t0;
- y0[0] = H;
- y0[1] = Vpocz;
- //calkowanie
- while (y0[0]>=0)
- {
- vrk4(t, y0, dt, 2, spadekotwarty, y);
- t = t + dt;
- y0[0] = y[0];
- y0[1] = y[1];
- printf("t=%lf V=%lf h=%lf\n", t, y[1], y[0]);
- setcolor(1.0); circle(t, y[0], 1); // czerwone - H WYSOKOSC
- setcolor(0.1); circle(t, y[1], 1); // niebieskie - V PREDKOSC
- }
- wait();
- }
- double spadek(double t, double V)
- {
- double f;
- if (V>0) f = -g - ro*S*Cd / 2 / m*V*V;
- else f = -g + ro*S*Cd / 2 / m*V*V;
- return f;
- }
- void spadekotwarty(double t, double y[], double f[])
- {
- f[0] = y[1];
- f[1] = -g - ro*S*Cd / (2 * m) * y[1] * fabs(y[1]);
- }
- void vrk4(double x0, double y0[], double h, int n, void(*fun)(double, double*, double*), double y1[])
- {
- //double MAXN;
- int i;
- double k1[MAXN], k2[MAXN], k3[MAXN], k4[MAXN];
- double ytmp[MAXN];
- fun(x0, y0, k1);
- for (i = 0; i<n; ++i)
- {
- k1[i] *= h;
- ytmp[i] = y0[i] + k1[i] / 2.0;
- }
- fun(x0 + h / 2.0, ytmp, k2);
- for (i = 0; i<n; ++i)
- {
- k2[i] *= h;
- ytmp[i] = y0[i] + k2[i] / 2.0;
- }
- fun(x0 + h / 2.0, ytmp, k3);
- for (i = 0; i<n; ++i)
- {
- k3[i] *= h;
- ytmp[i] = y0[i] + k3[i];
- }
- fun(x0 + h, ytmp, k4);
- for (i = 0; i<n; ++i)
- k4[i] *= h;
- for (i = 0; i<n; ++i)
- y1[i] = y0[i] + (k1[i] + 2.*k2[i] + 2.*k3[i] + k4[i]) / 6.;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement