begin process at 2012 05 26 05:55:07
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

MX2004: CLASS

 > FONCTIONS MATHEMATIQUES

FONCTIONS MATHEMATIQUES


 Information sur la source

Note :
7 / 10 - par 3 personnes
7,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :MX2004: CLASS Niveau :Initié Date de création :21/10/2004 Date de mise à jour :21/10/2004 21:46:46 Vu :7 014

Auteur : SuperDevy

Ecrire un message privé
Site perso
Commentaire sur cette source (5)
Ajouter un commentaire et/ou une note

 Description

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

  • 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;
  • }
  • }
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.


 Historique

21 octobre 2004 21:46:46 :
Correction de la fonction vProdVect (produit vectorielle)

 Sources du même auteur

Source avec Zip TREE AVEC RECHERCHE POUR AFFICHER UN XML.
Source avec Zip RETARDER L'EXECUTION D'UNE FONCTION
Source avec Zip COMPOSANTS POUR NON-PROGAMMEUR
Source avec Zip VOITURE INTELLIGENTE :: OPTIMISATION DE TRAJECTOIRE
Source avec Zip Source avec une capture BONNE TENUE DE ROUTE POUR CES VOITURES.

 Sources de la même categorie

Source avec Zip Source avec une capture LECTEUR MP3 AVEC LISTE DE LECTURE, STREAMING OU NON (COMPOSA... par eron
Source avec Zip ENREGISTRER DANS UN FICHIER TEXTE AVEC L'AIDE D'UN EXE par Mr_Qqn
Source avec Zip Source avec une capture CLASSE CALCULATOR par BananaTree
Source avec Zip Source avec une capture CLASS "PATERN" : PERMET LA CRÉATION DE REMPLISSAGE DE MOTIF ... par top30
Source avec Zip Source avec une capture MA CLASSE DE BASE SUR LES TEXTES ( STRINGS ) par snakeeater1

Commentaires et avis

Commentaire de top30 le 21/10/2004 21:33:52

Salut
t as des petites erreurs :

>> if ( u.length != 3  or v.length != 3 ) {...
Si la longueur du tableau est de 4 y pas d'erreur!
De plus Macromedia ecommande "||" au lieu de "or"

Corriges pour >
if ( u.length < 4 && v.length < 4 ) {
   // faire ceci
} else {
   // erreur : les tableaux arguments ne sont pas de longueur 3 !
}

Je viens d'en voir une autre   = ( :
>> if ( Math.floor(n) != n ) {...
Et tu jettes une erreur si "n" n'est pas un entier. Mais 1.2 renverra "true"... Et c'est pas un entier !!!! Si tu veux que de l'entier en "n" corriges pour :
>> if ( !String(n).split(".")[1]) {...
   \\  Faire ceci...
} else {
   // Erreur : "n" n'est pas un entier...
}


Et comme si je suis "bête" si tu pouvais me donner des exemples concrets d'utilisation, ca serait sympa!

Merci d'avance !

Commentaire de SuperDevy le 21/10/2004 22:13:33

Des erreur !
Voyons cela...

- Pour `u.length != 3` j'ai refais l'essaie, il me renvoie bien true si le tableau `u` est de longueur 4.
Mais c'est plus sûr de mettre un test d'égalité.

- Pour la ligne qui test si un nombre est un entier, ta propostion marche très bien, mais la mienne aussi !
Je ne saisi pas le problème ?

Pour ce qui est des exemple, j'upload ce WE.

Merci de m'avoir lu...

Commentaire de top30 le 22/10/2004 08:27:18

Oui, effectivement... Je suis grave des fois. Autant pour moi : Le coup des length, c est toi qui as raison, et c'est moi qui provoque l'erreur...

Par contre, je confirme que l'entier :

test > trace(iFac(5.5));
Trace : undefined...

Je n'utlisais pas le "trow" d'erreur jusqu'à mainetenant, mais je viens de voir que cela "breakait" et c'est interessant. Cela "trace" en permettant de récuperer eventuellment l'erreur" plus tard... Bien vu !

Commentaire de omarpascal le 01/06/2006 13:57:56

Il est trop génial ce superdevy !!!!!!!!!!!

Commentaire de jonorange le 11/11/2007 13:37:25

Je n'ai pas encore tester mais je trouve l'initiative Géniale!!

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,811 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales