Advertisement
Gaxil

balmod.c

May 23rd, 2024
661
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. #include <string.h>
  2. #include "grx/include/grx20.h"
  3. #include "grx/include/grx20.h"
  4. #include "grx/include/grxkeys.h"
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <math.h>
  8. #include "balmod.h"
  9.  
  10.  
  11. void horsi_model_default_init(horsi_model_data *mo)
  12. {
  13.     mo->v0 = 100.0;
  14.     mo->alpha = M_PI / 4.0;
  15.     mo->g = 9.81;
  16.     mo->x = 0.0;
  17.     mo->y = 0.0;
  18.     mo->x0 = 0.0;
  19.     mo->y0 = 0.0;
  20.     mo->dt = 0.001;
  21. }
  22.  
  23. void horsi_model_start(horsi_model_data *mo)
  24. {
  25.    mo->t = 0.0;
  26. }
  27.  
  28. int horsi_model_strela_nedopadla(horsi_model_data *mo)
  29. {
  30.       return ( mo->y >= 0 );
  31. }
  32.  
  33. void horsi_model_iter (horsi_model_data *mo)
  34. {
  35.      mo->x = mo->x0 + mo->v0 * mo->t * cos(mo->alpha);
  36.      mo->y = mo->y0 + mo->v0 * mo->t * sin(mo->alpha) - 0.5 * mo->g * mo->t * mo->t;
  37.      mo->t += mo->dt;
  38. }
  39.  
  40.  
  41. /////////////////////////////////////////////////////////////////////////
  42.  
  43.  
  44. void lepsi_model_default_init (lepsi_model_data *mo)
  45. {
  46.     mo->t0 = 0.0; mo->x0 = 0.0;  mo->y0 = 0.0;
  47.     mo->v0 = 470.0;
  48.     mo->eluhel = 45.0;
  49.     mo->alpha = mo->eluhel* M_PI/180.0;
  50.     mo->dt = 0.1;
  51.     mo->R=0.02; // polomer strely
  52.     mo->m=10.8; // hmotnost strely
  53.     mo->ro=1.3; // hustota vzduchu
  54.     mo->C=0.55; // koeficient odporu
  55.     mo->g=9.81; // tihove zrychleni
  56.     mo->S= M_PI * mo->R * 2.0;
  57.     mo->k=mo->C* mo->ro * mo->S/2.0;
  58. }
  59.  
  60. int lepsi_model_strela_nedopadla(lepsi_model_data *mo){
  61.     return (mo->y>=0) ;
  62. }
  63.  
  64. void lepsi_model_start(lepsi_model_data *mo)
  65. {
  66.  mo->vx=mo->v0*cos(mo->alpha);
  67.  mo->vy=mo->v0*sin(mo->alpha);
  68.  
  69.  mo->v=sqrt(mo->vx*mo->vx + mo->vy*mo->vy);
  70.  // --- vlastni numericka integrace - k
  71.  mo->t=mo->t_minule=mo->t0;
  72.  mo->x=mo->x_minule=mo->x0;
  73.  mo->y=mo->y_minule=mo->y0;
  74.  mo->i=1;
  75. }
  76.  
  77. int lepsi_model_iter (lepsi_model_data *mo)
  78. {
  79.    // cislo aktualni iterace (pro vypovet neni potreba)
  80.    mo->i=mo->i+1;
  81.  
  82.    // DOPROGRAMUJTE NUMERICKE RESENI POHYBOVE ROVNICE EULEROVOU METDODOU
  83.    // tj. postupny vypocet x,y   ax,ay    vx,vy
  84.    // ( mo->x, mo->y atd. )
  85.  
  86.     mo->x = mo->x_minule + mo->vx * mo->dt;
  87.     mo->y = mo->y_minule + mo->vy * mo->dt;
  88.  
  89.  
  90.     mo->ax = -mo->k * mo->v * mo->vx/mo->m;
  91.     mo->ay = -mo->g - mo->k * mo->v * mo->vy/mo->m;
  92.  
  93.     mo->vx = mo->vx + mo->ax*mo->dt;
  94.     mo->vy = mo->vy + mo->ay*mo->dt;
  95.  
  96.    // vypocet okamzite rychlosti v danem kroku
  97.    mo->v= sqrt(mo->vx*mo->vx + mo->vy*mo->vy);
  98.  
  99.    // priprava pristiho casoveho okamziku
  100.    mo->t=mo->t_minule + mo->dt;
  101.  
  102.    // zapamatovani minuleho casoveho okamziku a polohy projektilu
  103.    mo->t_minule=mo->t;
  104.    mo->x_minule=mo->x;
  105.    mo->y_minule=mo->y;
  106.  
  107. }
  108.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement