1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
| void InitTornade(Principale *ptr)
{
int compteurPart=0;
int compteurBoucle=0;
float X,Y,Z;
float rayonMax,A,htPart,rayon;
const float largPart=1; //Longueur côtés triangle équilatéral
const float htTri=largPart*sin(60*M_PI/180); //Calcul hauteur triangle
double angle;
const int nbToursBoucle=NB_PARTICULES_TORNADE;
ptr->La_meteo.tornade.positionInit[0]=1000;//myRand(0,TAILLE_MAP/2); //Position initiale de la tornade
/*if(rand()%2==1)
ptr->La_meteo.tornade.positionInit[0]*=-1;*/
ptr->La_meteo.tornade.positionInit[1]=0;//myRand(0,TAILLE_MAP/2);
if(rand()%2==1)
ptr->La_meteo.tornade.positionInit[1]*=-1;
ptr->La_meteo.tornade.hauteur=myRand(800,1000); //Calcul caractéristiques tornade
ptr->La_meteo.tornade.largBase=myRand(40,80);
ptr->La_meteo.tornade.largHaut=myRand(500,1000);
ptr->La_meteo.tornade.dureeDeVie=myRand(10,120);
A=(ptr->La_meteo.tornade.largHaut-ptr->La_meteo.tornade.largBase)/pow(ptr->La_meteo.tornade.hauteur,2);
while(1)
{
Z=((float)compteurBoucle/nbToursBoucle)*ptr->La_meteo.tornade.hauteur; //Hauteur particule
htPart=Z;
rayonMax=A*pow(htPart,2)+ptr->La_meteo.tornade.largBase; //Fonction du second degré permettant d'avoir une forme d'entonnoir
rayon=myRand(0.9*rayonMax,rayonMax); //Coordonnées polaires particule
angle=(double)(rand()%360);
X=rayon*cos(angle*M_PI/180); //Coordonnées cartésiennes particule
Y=rayon*sin(angle*M_PI/180);
ptr->La_meteo.tornade.particules[compteurPart]=X; //Calcul des coordonnées de chacun des trois vertices
ptr->La_meteo.tornade.particules[compteurPart+1]=Y;
ptr->La_meteo.tornade.particules[compteurPart+2]=Z+(2.0/3)*htTri;
ptr->La_meteo.tornade.particules[compteurPart+3]=X-(largPart/2)*sin(angle*M_PI/180);
ptr->La_meteo.tornade.particules[compteurPart+4]=Y+(largPart/2)*cos(angle*M_PI/180);
ptr->La_meteo.tornade.particules[compteurPart+5]=Z-htTri/3;
ptr->La_meteo.tornade.particules[compteurPart+6]=X+(largPart/2)*sin(angle*M_PI/180);
ptr->La_meteo.tornade.particules[compteurPart+7]=Y-(largPart/2)*cos(angle*M_PI/180);
ptr->La_meteo.tornade.particules[compteurPart+8]=Z-htTri/3;
///////////////////////////////////////////////////////////////////////////////////////////////
ptr->La_meteo.tornade.couleurs[compteurPart]=0.3; //Couleur gris foncé
ptr->La_meteo.tornade.couleurs[compteurPart+1]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+2]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+3]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+4]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+5]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+6]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+7]=0.3;
ptr->La_meteo.tornade.couleurs[compteurPart+8]=0.3;
compteurBoucle++;
compteurPart+=9;
if(compteurPart==9*NB_PARTICULES_TORNADE)
break;
}
} |
Partager