Beispiel #1
0
POINT* distanceInf(POINT xm, POINT *a, POINT *b){
	double normeA,normeB;
	normeA=sqrt(auCarre((xm.x)-(a->x))+auCarre((xm.y)-(a->y)));
	normeB=sqrt(auCarre((xm.x)-(b->x))+auCarre((xm.y)-(b->y)));
	if(normeA>=normeB)
		return b;
	else
		return a;

}
/*
Dans cette fonction on tri le tableau de points donné:
on enlève les redondances au niveau des équations
*/
int triAbscisse(POINT tab[],int longueur){
	int i,j,k,compteur,doublon,c;
	POINT *resultat=malloc(longueur*sizeof(POINT));
	compteur=0;
	doublon=0;
	for(i=0;i<longueur;i+=2){//on prend les points 2 par 2
			if(tab[i].x==tab[i+1].x){//si ils ont la même abscisse
				if(auCarre(tab[i].y)<=auCarre(tab[i+1].y)){
					resultat[compteur]= tab[i+1];
					i-=1;
					compteur+=1;
					//on supprime le plus proche de (x,0)
				}
				else{
					resultat[compteur]=tab[i];
					compteur+=1;
					
				}
				doublon+=1;

			}else{
				resultat[compteur]=tab[i];
				resultat[compteur+1]=tab[i+1];
				compteur+=2;
				
			}
		//printf("%d doublon\n",doublon);


	}
	POINT *resultat_without_zero=malloc((longueur-doublon)*sizeof(POINT));
	c=0;
	for (j = 0; j < longueur; j++){
		if((resultat[j].x==resultat[j+1].x)&&(resultat[j].y==resultat[j+1].y)){
			j+=1;
		}
		resultat_without_zero[c]=resultat[j];
		c+=1;
	}
	for(k=0;k<longueur-doublon;k++){
		tab[k]=resultat_without_zero[k];
	}
	return longueur-doublon;

}
DOUBLET* tableauValeurCritique(POINT tab[],int longueur,int ordonne){
	int i,j;
	double valeur_en_zero,valeur;
	double epsilon=0.00000001;
	double coeff_directeur;
	j=0;
		
	//if(longueur%2==0){
		DOUBLET *critique=malloc((longueur/2)*sizeof(DOUBLET));

		for(i=0;i<longueur;i+=2){
			valeur_en_zero=(auCarre(tab[i+1].x)-auCarre(tab[i].x)+auCarre(tab[i+1].y)-auCarre(tab[i].y))/(epsilon+2*((tab[i+1].x)-(tab[i].x)));
			coeff_directeur=(((tab[i+1].y)-(tab[i].y))/((tab[i].x)-(tab[i+1].x)));
			valeur=valeur_en_zero+ (coeff_directeur*ordonne);
			critique[j].mediatrice=valeur;
			critique[j].a=tab[i];
			critique[j].b=tab[i+1];
			j+=1;
		}
		return critique;
}
Beispiel #4
0
/*
Calcul la distance entre 2 points
*/
double distance(POINT a , POINT b){
	double norme;
	norme=sqrt(auCarre((a.x)-(b.x))+auCarre((a.y)-(b.y)));
	return norme;
}