/** intersection de deux formes */ int forme_touche_forme(Forme* forme1,Forme* forme2){ Point* point1=forme1->points; Point* point2; //verifier d'abord si l'une des formes est incluse dans l'autre if(forme_dans_forme(forme1,forme2) || forme_dans_forme(forme2,forme1)){ return 2; } //verfier l'intersection des arrêtes while(point1!=NULL){ point2=forme2->points; puts("verifier arrete") ; while(point2!=NULL){ if(segment_inter_segment(*point1,*point_suivant(forme1->points,point1), *point2,*point_suivant(forme2->points,point2)) !=NULL){ //printf("inter"); return 1; } //printf("inter"); point2=point2->suivant; } point1=point1->suivant; } return 0; }
//dessiner une forme (polygone simple) void dessiner_forme(Forme* forme,SDL_Surface* ecran){ Point* point=forme->points; Point* psuiv=point_suivant(forme->points,point); while(point!=NULL){ dessiner_ligne(ecran,point->x,point->y,psuiv->x,psuiv->y); point=point->suivant; psuiv=point_suivant(forme->points,psuiv); } }
/*** Mode Auto avec suivit des positions GPS *********************************/ void modeAuto() { // Vérification si besoin d'initialiser if (prevModeVol != AUTO) { init_suivi(); printf("-> Init AUTO\r\n"); } // **** Traitement si nouvelle trame GPS reçue **** if (GPS_MAJ){ // **** Distance par rapport au point cible **** // Point cible non encore atteint = calcul des consignes sur le même point cible if (suivant == 0){ suivi_cap(); } // Point cible atteint else{ // Il existe d'autres points = enregistrement du nouveau point cible puis calcul des consignes pour ce nouveau point // roulis = recalculé | altitude : celle du point à atteindre | lacet = 0 | vitesse = vitesse maximale if (point_suivant()==1){ suivi_cap(); consignes.altitude = final.z; consignes.vitesse = vitesse_max; // si trajectoire horizontale : vitesse max quand même ! } // On a passé le dernier point : vol rectiligne horizontal (en attente d'un changement de mode ou d'ajout d'autres points dans le buffer) // roulis = 0 | altitude : celle du point à atteindre | lacet = 0 | vitesse = vitesse éco //TODO: trajectoire circulaire autour du dernier point à implémenter else{ consignes.roulis = 0; consignes.vitesse = vitesse_eco; } }
//pt ds frm int point_dans_forme(Forme* forme,float x,float y){ //printf("point analyse : (%d,%d)\n",x,y); //construire le point cherché Point point={x,y,NULL}; //verifier d'abord les frontières Point* liste_point=forme->points; Point* pact=liste_point; Point* psuiv=point_suivant(liste_point,pact); while(pact!=NULL){ if(point_dans_segment(point,*pact,*psuiv)){ //puts("point sur un segment"); return 1; } psuiv=point_suivant(liste_point,psuiv); pact=pact->suivant; } //puts("point n'est pas dans la frontire"); //maintenat, n'est pas dans la frontière, verifier l'intérieur int r= pnpoly(forme,x,y); //if(r) puts("et il'est a l'interieure"); //else puts("il est a l'exterieure"); return r; }
void dessiner_inter(Forme* forme1,Forme* forme2){ int r=255,v=0,b=0; Point* point1=forme1->points; Point* point2; //verfier l'intersection des arrêtes while(point1!=NULL){ point2=forme2->points; Point* inter=NULL; while(point2!=NULL){ puts("test"); inter=segment_inter_segment(*point1,*point_suivant(forme1->points,point1),*point2,*point_suivant(forme2->points,point2)); if(inter!=NULL){ dessiner_plus(inter->x,inter->y,r,v,b); printf(": inter\n"); } point2=point2->suivant; } point1=point1->suivant; } }