Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdlib.h>
- #include <stdio.h>
- #include <math.h>
- #define g 9.81
- #define dth 0.1
- #define dt 0.1
- ///////////////////////////////////////////////////////////struct
- struct vett{
- double x,y;
- }vento; //creo la struttura vettore e contestualmente creo un vettore vento (si può fare aggiungendo typedef)
- struct punto{
- struct vett p,v,a; //creo struttura che segue il punto in tutti i suoi valori (//)
- }punt, temp;
- //////////////////////////////////////////////////////////funzioni
- struct vett aa(double vx,double vy,double ventx,double venty, double fA);
- struct punto kutta(struct punto fpunt, struct vett fvento, double fA);
- //---------------------
- main(){
- int i=0;
- double A=0.1, modv=20, theta=0, thetaMAX, grad=(M_PI/2)/dth;
- punt.p.x=0;
- punt.p.y=0;
- vento.x=0;
- vento.y=0;
- do{
- punt.v.x=modv*cos(theta);
- punt.v.y=modv*sin(theta);
- do{
- temp=kutta(punt, vento, A);
- printf(" %lf %lf \n", theta*180/M_PI,punt.p.x);
- }while(punt.p.y>0);
- if(temp.p.x>punt.p.x){thetaMAX=theta;}
- punt=temp;
- theta+=dth;
- }while(theta<M_PI/2);
- printf("massima gittata raggiunta a %lf gradi \n", thetaMAX*180/M_PI);
- }
- //---------------------
- struct vett aa(double vx,double vy,double ventx,double venty, double fA){ //prende le velocità del proiettile e del vento e scrive - tramite puntatore - l'accelerazione risultante nella struct punt.a
- struct vett acc;
- acc.x=-fA*fabs(vx-ventx)*(vx-ventx);
- acc.y=-fA*fabs(vy-venty)*(vy-venty)-g;
- //printf(" vettore acc %lf %lf \n", acc.x, acc.y);
- return acc;
- }
- struct punto kutta(struct punto fpunt, struct vett fvento, double fA){
- double vx,vy,ventx,venty;
- struct vett a1;
- vx=fpunt.v.x;
- vy=fpunt.v.y;
- ventx=fvento.x;
- venty=fvento.y;
- a1=aa(vx,vy,ventx,venty,fA);
- fpunt.v.x=a1.x*dt;
- fpunt.v.y=a1.y*dt;
- fpunt.p.x=fpunt.v.x*dt;
- fpunt.p.y=fpunt.v.y*dt;
- return fpunt;
- }
Advertisement
Add Comment
Please, Sign In to add comment