bonjour à tous,
j'ai un exercice informatique sur lequel je bloque.
Il faut réaliser le suivi d'un rayon au travers une conduite de 1 cm de large et de 19 cm de hauteur.
La conduite est de plus découper en carré de 1 cm de côté, ce qui nous donne 19 carrés en tout.
Le rayon part d'une position x de la paroi du haut avec un angle alpha qui sont déterminé aléatoirement.
Si le rayon sort par la droite il revient par la gauche et inversement. Si le rayon atteint l'une des parois (y=0 ou y= 19) alors il est réfléchi.
Il faut en plus calculer la distance qu'il aura parcouru dans chaque carré qu'il faudra stocker dans un tableau.
Il faut également limiter le nombre de carré traversé à 100.
Je vous poste mon travail en langage C.
Code C/C++ :
#include <stdio.h>
#include <math.h>
#include <limits.h>
int main(void)
{
double x,y,Vx,Vy,DX,DY,longueur,min;
float t1,t2,t3,t4;
int i,j,n,cpt=0;
printf("Entrez les dimensions DX et DY du billard :");
/* dans cette partie on rentre les données: dimensions coordonnées vitesse*/
scanf("%lf %lf",&DX,&DY); /* et le nombre d'itération*/
printf("\nEntrez les coordonnees x0 et y0 de la boule :");
scanf("%lf %lf",&x,&y);
printf("\nEntrez les vitesses Vx et Vy de la boule :");
scanf("%lf %lf",&Vx,&Vy);
printf("\nEntrez le nombre n :");
scanf("%d",&n);
if(y==DY||y==0) Vy=-Vy; /*Si le départ du rayon est sur l'une des deux parois alors on change la vitesse*/
printf("\nles coordonnes %d de la boule sont : %7.2f %7.2f",0,x,y);
for(j=0;j<n;j++)
{
/*On calcul les temps pour atteindre chacune des parois*/
t1=-y/Vy;
t2=(DY-y)/Vy;
t3=-x/Vx;
t4=(DX-x)/Vx;
/*on prend le min de ces temps*/
double t[4]={t1,t2,t3,t4};
min=3e508;
for(i=0 ; i<4; i++)
{if (t[i] < min && t[i]>0) min=t[i];}
x+=Vx*min;
y+=Vy*min;
longueur=min*sqrt(pow(Vx,2)+pow(Vy,2));
printf("\nla longueur du segment %d est : %7.2f",j+1,longueur);
if(y < 0.01 ){y=0; Vy= -Vy;}
if(y >DY - 0.01 ){y=DY; Vy= -Vy;}
if(x < 0.01 ){Vx= -Vx;}
if(x >DX - 0.01 ){Vx= -Vx;}
printf("\nles coordonnes %d de la boule sont : %7.2f %7.2f",j+1,x,y);
}
scanf("%d",&n);
return 0;
}
Je n'arrive pas à calculer la longueur parcourue par le rayon dans chaque carré.
Merci pour vos aides.