diff --git a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.c b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.c index 9828fcaccd5460c0fdf0f38127e4925f02580ae1..f7961b4a9279b575a4ba9d1d2c1db272b70eac8b 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.c +++ b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.c @@ -1,7 +1,84 @@ #include "ball.h" -ball_t ball; +ball_t ball; +laGrange_t coefLagrange; +int trajectory[NUMBERPOINT][2]; -void initBall(){ +void initBall (){ + + +} + +void laGrange (float beta[3],float Z[3]){ // y , x + printf("x canon : %f, x chute : %f, x filet : %f\n", Z[0], Z[1], Z[2]); + printf("y canon : %f, y chute : %f, y filet : %f\n", beta[0], beta[1], beta[2]); + + beta[0] =-beta[0]; + beta[1] =-beta[1]; + beta[2] =-beta[2]; + + coefLagrange.a= Z[0]/((beta[0]-beta[1])*(beta[0]-beta[2])) + +Z[1]/((beta[1]-beta[0])*(beta[1]-beta[2])) + +Z[2]/((beta[2]-beta[0])*(beta[2]-beta[1])); + + coefLagrange.b= -(Z[0]*(beta[1]+beta[2]))/((beta[0]-beta[1])*(beta[0]-beta[2])) + -(Z[1]*(beta[0]+beta[2]))/((beta[1]-beta[0])*(beta[1]-beta[2])) + -(Z[2]*(beta[0]+beta[1]))/((beta[2]-beta[0])*(beta[2]-beta[1])); + + coefLagrange.c= (Z[0]*beta[1]*beta[2])/((beta[0]-beta[1])*(beta[0]-beta[2])) + +(Z[1]*beta[0]*beta[2])/((beta[1]-beta[0])*(beta[1]-beta[2])) + +(Z[2]*beta[0]*beta[1])/((beta[2]-beta[0])*(beta[2]-beta[1])); +} + +float defineAngle (canon_t canon, int xDropPoint, int yDropPoint){ + float distance; + float angleSin; + distance= sqrtf( powf((float)(xDropPoint-canon.x),2)+powf((float)(yDropPoint-canon.y),2)); + angleSin = asinf(distance/(xDropPoint-canon.x)); + return angleSin; +} + +void calculationTrajectory(canon_t canon, int xDropPoint, int yDropPoint){ + int i; + float setUp[2][3]; + float distance= (float)(yDropPoint-canon.y); + + trajectory[0][0]=canon.y; + trajectory[0][1]=canon.x; + + trajectory[NUMBERPOINT-1][0]=yDropPoint; + trajectory[NUMBERPOINT-1][1]=xDropPoint; + + setUp[1][0]=(float)canon.y; + setUp[0][0]=canon.x; + setUp[1][1]=(float)yDropPoint; + setUp[0][1]=xDropPoint; + //setUp[0][2]=(13.40/2);// distance du filet dans le repère de frappe + //filet X + //terrain.w = 5.20 * zoom; + // setUp[0][2] = terrain.x + terrain.w + 50 + (13.40 * zoom)/2 -2; + setUp[0][2] = 50 + 5.20 * 40 + 50 + (13.40 * 40)/2 - 2; + //setUp[0][2] = 0; + + //filet Y + // drawerTerrainSideView.y - 1,55 * zoom + // drawerTerrainSideView.y = terrain.y + terrain.h; + //terrain.h = 13.40 * zoom + //setUp[1][2] = 1.55*40; /// hauteur du filet + setUp[1][2] = 50 + 13.40 * 40 - 3.55 * 40; + //setUp[1][2] = 0; + laGrange(setUp[1],setUp[0]); //laGrange(y, x); + + printf("coef a:%f; coef b:%f; coef c:%f\n", coefLagrange.a, coefLagrange.b, coefLagrange.c); + + float step= distance / (NUMBERPOINT-1); + + for (i=1; i<NUMBERPOINT-1; i++){ + trajectory[i][0]=(int)((float)canon.y + i*step); + trajectory[i][1]=(int)(coefLagrange.c+ + coefLagrange.b*((float)canon.y + i*step)+ + coefLagrange.a*(powf((float)canon.y + i*step,2))); + } + } \ No newline at end of file diff --git a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.h b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.h index 5938cb0d5d7b04e24bfd6d3e4646187362b7c3a7..a2c75c0b51eb72fbe94df1f0e8a1cb8fb42c576d 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.h +++ b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/ball.h @@ -1,13 +1,40 @@ #ifndef BALL_H #define BALL_H -typedef struct ball{ - int x; - int y; -} ball_t; +#include <stdlib.h> +#include <time.h> +#include <stdio.h> +#include <math.h> +#include "canon.h" + +#define NUMBERPOINT 300 + +typedef enum { + false,true +}booleen_t; + +typedef struct ball { + int x; + int y; + int z; + float angle; + float speed; +}ball_t; + +typedef struct laGrange{ + float a; + float b; + float c; +}laGrange_t; extern ball_t ball; +extern laGrange_t coefLagrange; +extern int trajectory[NUMBERPOINT][2]; -void initBall(); +void initBall(); +void laGrange(float *, float *); +float defineAngle(canon_t, int, int); +//void calculationTrajectory(canon_t, int, int, int, int); +void calculationTrajectory(canon_t, int, int); -#endif \ No newline at end of file +#endif \ No newline at end of file diff --git a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/render.c b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/render.c index b8e2a56124c0f90dfa0a9cf46308962844fee1c6..8bfa93109bd4c951d2b412b6fecbad2ee5833b24 100644 --- a/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/render.c +++ b/travail_de_groupe/jeu_appren_par_renfo/antoi_render_2d/source/render.c @@ -238,6 +238,25 @@ void drawTrajectoireTopView(){ SDL_RenderDrawLine(renderer, terrain.x+canon.x, terrain.y+canon.y, drawerPointDeChute.x, drawerPointDeChute.y); } +void drawTrajectoireSideView(){ + canon_t canon_trajectoire_sideview; + canon_trajectoire_sideview.y = drawerTerrainSideView.x + canon.y; + canon_trajectoire_sideview.x = drawerTerrainSideView.y; + + drawerPointDeChute.y = terrain.y + terrain.h; + + calculationTrajectory(canon_trajectoire_sideview, + drawerPointDeChute.y, + drawerPointDeChute.x + ); + + for(int i=0; i<NUMBERPOINT-1; i++){ + printf("point %d (%d, %d)\n", i, trajectory[i][0], trajectory[i][1]); + SDL_SetRenderDrawColor(renderer, 0, 0, 255, 255); + SDL_RenderDrawLine(renderer, trajectory[i][0], trajectory[i][1], trajectory[i+1][0], trajectory[i+1][1]); + } +} + void drawBall(){ /*int i; SDL_Rect rect_life; @@ -293,6 +312,7 @@ void mainLoop(){ drawTerrainSideView(); drawCanonSideView(); drawPointDeChuteSideView(); + drawTrajectoireSideView(); // drawInformations();