예제 #1
0
파일: Forme.cpp 프로젝트: ouadev/Tangram
/**
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;
}
예제 #2
0
파일: app.cpp 프로젝트: ouadev/Tangram
//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);
	}
}
예제 #3
0
	/*** 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; 
	            }
	      	}
예제 #4
0
파일: Forme.cpp 프로젝트: ouadev/Tangram
//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;
}
예제 #5
0
파일: app.cpp 프로젝트: ouadev/Tangram
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;
	}

}