#include <graphics.h>
#include <stdlib.h>
#include <stdio.h>
#include <conio.h>
#include <dos.h>
#include <math.h>

#define PI 3.141592654
#define E 2.718281828
#define G 9.81

void zobraz(int x1, int y1, int y_pos)   /*zobrazuje bod s pruzinou*/
{
int x,y;

x=320+x1;
y=100+y_pos+((-1)*y1);
/* stred */
setcolor(15);
line(315,100,325,100);
line(320,95,320,105);

/* pruzina */
setcolor(1);
line(320,100,x,y);

/* hm bod */
setcolor(2);
circle(x,y,3);
/*floodfill(x-1,y-1,3);*/
}


void smaz(int x1, int y1,int Xlast1,int Ylast1, int y_pos)   /*zmaze bod s pruzinou */
{
int x,y,Xlast,Ylast;

x=320+x1;
y=100+y_pos+((-1)*y1);
Xlast=320+Xlast1;
Ylast=100+y_pos+((-1)*Ylast1);

setcolor(0);
line(320,100,x,y);
circle(x,y,3);
/*
setcolor(4);
line(x,y,Xlast,Ylast);    dokresluje trajektorii */
}



void main(void)
{

int gdriver=DETECT, gmode, grchyba;
int alf,x=0,y=0,Xlast,Ylast,k;
float m=0,omega=0,t=0.001,U,Ux,Uy,l_zat,alf2,l0,Fs,tl=0.1;
   /*
   alf   uhel ve stupnich
   m     hmotnost
   l0    delka bez zatizeni
   g     gravitace
   t     pseudo cas;
   k     tuhost pruziny
   U     protazeni po natazeni
   l_zat delka po zatizeni  (rovnovazna poloha)
   tl    tlumeni
   omega  uhlova frekvence pruziny

*/
/*inicializace*/
initgraph(&gdriver, &gmode,"");
/*cteni vysledku inicializace*/

grchyba=graphresult();
if(grchyba!=grOk) /*test typu chyby*/
   {
    printf("Chyba grafiky: %s\n", grapherrormsg(grchyba));
    exit(1);
    /*navrat s chybou*/
   }

setcolor(15);
setbkcolor(0);

printf("\nZadej delku pruziny: ");
 scanf("%f",&l0);
 zobraz(0,0,l0);

printf("Zadej tuhost pruziny: ");
 scanf("%d",&k);

printf("Zadej hmotnost bodu: ");
 scanf("%f",&m);
 l_zat=l0+m*G/k;
 smaz(0,0,0,0,l0);
 zobraz(0,0,l_zat);

printf("Zadej uhel: ");
 scanf("%d",&alf);
 alf2=(alf-90)*PI/180;   /*prepocet stupnu na radiany + aby 0st bylo dole*/

printf("Jakou silou natahnete pruzinu: ");
 scanf("%f",&Fs);
 U=Fs/k;
 smaz(0,0,0,0,l_zat);

/* zobraz(cos(alf2)*(l_zat+U),sin(alf2)*(U),l_zat);

 printf("Zadejte parametr tlumeni (0-1): ");
 scanf("%f",&tl);

getch();
 smaz(cos(alf2)*(l_zat+U),sin(alf2)*(U),cos(alf2)*(l_zat+U),sin(alf2)*(U),l_zat);*/


Ux=U*cos(alf2); /*x-ova amplituda*/
Uy=U*sin(alf2);

omega=sqrt(k/m);

Xlast=x=Ux*exp(-t*tl)*sin(omega*t+alf2);
Ylast=y=Uy*exp(-t*tl)*sin(omega*t);

do
 {
  x=Ux*exp(-t*0.1)*sin(omega*t);
  y=Uy*exp(-t*0.1)*sin(omega*t+alf2);

  zobraz(x,y,l_zat);
  delay(20);
  smaz(x,y,Xlast,Ylast,l_zat);

  Xlast=x;
  Ylast=y;

  t=t+0.01;

 } while(kbhit()==0);

printf("konec");

getch();
closegraph();
}

