Fonctions mathematiques

Contenu du snippet

Voici un ensemble de fonctions mathématiques pour compléter l'objet Math de Flash.

Elles concernant :
- les TABLEAUX (min, max, somme, produit)
- les ENTIERS (factorielle)
- les NOMBRES COMPLEXES (module, argument, conjugué, somme)
- les VECTEURS : modélisés par des tableaux (produit scalaire, produit vectoriel)

Avec GESTION DES ERREURS !

Pour les utiliser, c'est comme pour l'objet Math :

import Science; // Pour charger la classe

trace(aMin([12,5,3,7,1]) // Renvoie 1
trace(iFact(5)) // Renvoie 120

Source / Exemple :


class Science
{
	// FONCTIONS SUR LES TABLEAUX
	static function aMax(t:Array):Number {			// retourne le maximum du tableau
		var M:Number = t[0];
		for (var i in t) {
			M = Math.max(M, t[i]);
		}
		return M;
	} 
	
	static function aMin(t:Array):Number {			// retourne le minimum du tableau
		var m:Number = t[0];
		for (var i in t) {
			m = Math.min(m, t[i]);
		}
		return m;
	} 
	
	static function aSum(m:Array,n:Array):Array {	// retourne le tableau somme
		if(m.length != n.length) 
			throw new Error("Erreur : `Science.aSum(m,n)`, les tableaux ne sont pas de même longueur :\n n=["+n+"]\n m=["+m+"]");
		for(var i in m){
			m[i]+=n[i];
		}
		return m;
	}

	static function aProd(m:Array,n):Array {		// retourne le produit de m par n (n entier ou Array)
		if(typeof(n)=="Number"){								// Si n est un nombre :
			for(var i in m){	m[i]*=n;	}
		}else if(typeof(n)=="Array" and n.length==m.length){	// Si n est un tableau :
			for(var i in m){	m[i]*=n[i];	}
		}else{
			throw new Error("Erreur : `Science.iProd(m,"+n+")`, le second argument doit être un nombre ou un tableau de la même longueur que le premier");
		}
		return m;
	}
	// FONCTIONS ARITHMETIQUES
	static function iFact(n:Number):Number {		// retourne factorielle de n (n!)
		if(Math.floor(n) != n) 
			throw new Error("Erreur : `Science.iFact("+n+")`, l'argument doit être un entier"); 
		var F:Number=1;
		do {
			F*=n;
		} while((n--) != 1);
		return F;
	} 

	// FONCTIONS COMPLEXES : nombre complexe = Array(2)
	static function cMod(z:Array):Number {			// retourne le module du complexe (Pythagore)
		if(z.length!=2) 
			throw new Error("Erreur : `Science.cMod(["+z+"])`, l'argument doit être un tableau de longueur 2.");
		return Math.sqrt(z[0]*z[0]+z[1]*z[1]);
	}
	
	static function cArg(z:Array):Number {			// retourne l'argument du complexe (Math.atan2(.,.))
		if(z.length!=2) 
			throw new Error("Erreur : `Science.cArg(["+z+"])`, L'argument doit être un tableau de longueur 2.");
		return Math.atan2(z[1],z[0]);
	}

	static function cConj(z:Array):Array {			// retourne le conjugué ([a,b]->[a,-b])
		if(z.length!=2) 
			throw new Error("Erreur : `Science.cConj(["+z+"])`, L'argument doit être un tableau de longueur 2.");
		z[1]*=-1;
		return z;
	}

	static function cSum(x:Array,y:Array):Array {	// retourne la somme x+y
		if(x.length!=2 or y.length!=2) 
			throw new Error("Erreur : `Science.cMod(["+x+"],["+y+"])`, les arguments doivent être des tableaux de longueur 2.");
		x[0]+=y[0];
		x[1]+=y[1];
		return x;
	}

	// FONCTIONS VECTORIELLES : vecteur = Array(3)
	static function vProdVect(u:Array,v:Array):Array { // retourne le produit vectorielle de u et v.
	if(u.length!=3 or v.length!=3)
		throw new Error("Erreur : `Science.vProdVect(["+u+"],["+v+"])`, les arguments doivent être des tableaux de longueur 3.");
	var w:Array = new Array(3);
	w[0]=u[1]*v[2]-u[2]*v[1];
	w[1]=u[2]*v[0]-u[0]*v[1];
	w[2]=u[0]*v[1]-u[1]*v[0];
	return w;
	}
	
	static function vProdScal(u:Array,v:Array):Number { // retourne le produit scalaire de u et v.
	if(u.length!=3 or v.length!=3)
		throw new Error("Erreur : `Science.vProdVect(["+u+"],["+v+"])`, les arguments doivent être des tableaux de longueur 3.");
	var p:Number = u[0]*v[0]+u[1]*v[1]+u[2]*v[2];
	return p;
	}
}

Conclusion :


D'autres fonctions sont bien sûr à venir ...
N'hésitez pas à m'en proposer ou à me suggérer des améliorations.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.