#include #include #include # define pi 3.1415927 //----------------------------------------------------------------------------------------------------------------------- /*Program numericno integrira izmerjene podatke. Na koncu vrne datoteko v kateri so podatki, ki opisujejo profil vodne gladine. Te podatke smo nato narisali v Gnuplotu. Avtor: Jure Aplinc (jure.aplinc@gmail.com) */ //----------------------------------------------------------------------------------------------------------------------- int main(void){ int i, j; double xl, xt, alpha, a, h, e, theta, delta, x0, k, y; double X[100], K[100]; a=64.3; // Laserski zarek je vodno gladino zadel pod kotom. a je razdalja od presecisca zarka z ravnino nedeformirane vodne gladine in navpičnico , ki seka sliko žarka na zaslonu. h=795.0; //Razdalja med zaslonom in vodno gladino. alpha=atan(a/h); // To je kot pod katerim je usmerjen laserski zarek. e=h*tan(pi/2.0-alpha);//e je razdalja med tocko x0 in xl (Za opis x0 in xl glej spodaj!). FILE *fin, *fout, *fini, *fouti, *foutsort; fin=fopen("prvic.dat", "r"); fout=fopen("prvic_kot.out", "w"); i=0; while(fscanf(fin, "%lf %lf", &xl, &xt)==2){ //xl je tocka v katero bi se odbil laserski zarek, ce nebi bilo deformacije vodne gladine. //xt pa tocka v katero se je odbil zarek na deformirani vodni gladini. //Ti dve tocki smo izmerili na našem zaslonu. x0=xl-e;//x0 je tocka na zaslonu, ki je pravokotna projekcija točke na vodni gladini, ki jo zadane laserski zarek. Ta tocka se premika, če premikamo laser. To tocko je potrebno izracunati iz podatkov - glej enacbe. Ta tocka nam pomaga pri racunanju, drugace pa ni pomembna. delta=atan((xt-x0)/h);//Imena teh kotov so enaka tistim v skici. V tem delu gre le za računanje z temi koti. theta=pi/4.0-delta/2.0-alpha/2.0;//Naklonski kot tangente. k=tan(theta);//Naklonski koeficient tangente. //printf("%lf, %lf\n", k, theta); fprintf(fout, "%lf %lf\n", xl, k); X[i]=xl; K[i]=k; i++; } fclose(fout); fclose(fin); j=0; y=0; fini=fopen("prvic_kot.out", "r"); fouti=fopen("prvic_int.out", "w"); //V tem delu integriramo meritve. //To naredi naslednji algoritem, ki naklon, ki smo ga izračunali zgoraj pomnozi z sirino intervala in to pristeje prejsnjim vrednosti hkrati pa jo zapise v datoteko. Opomba: sirina intervala je polovica razdalje med tockama levo in desno od opazovane tocke. for(j=0; j