begin process at 2012 05 26 06:37:49
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

ActionScripts

 > UN PEU DE PHYSIQUE: SOLIDE SOUMIS À 3 FORCES

UN PEU DE PHYSIQUE: SOLIDE SOUMIS À 3 FORCES


 Information sur la source

Note :
6,8 / 10 - par 5 personnes
6,80 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :ActionScripts Niveau :Débutant Date de création :05/06/2005 Date de mise à jour :05/06/2005 20:04:42 Vu / téléchargé :8 436 / 642

Auteur : mathadore

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

 Description

Cliquez pour voir la capture en taille normale
exemple de systeme soumis à 3 forces pour montrer que la somme vectorielle de ces 3 forces est nulle à l'equilibre du systeme.


Source

  • stop();
  • var Valeurs = new Object;
  • var PPoint = new Object();
  • var point = new Object;
  • var echelle = 10;
  • var i=0;
  • initialisation();
  • function initialisation()
  • {
  • //point =new Object();
  • point.x =-20;
  • point.y = 20;
  • Valeurs.init=false;
  • Valeurs.forceInitiale=0;
  • Valeurs.force = 0;
  • Valeurs.longeurInitiale =1;
  • Valeurs.longeur=1;
  • Valeurs.XO = 0;
  • Valeurs.YO = 0;
  • Valeurs.XOroot = point.x;
  • Valeurs.YOroot = point.y;
  • Valeurs.XT = 0;
  • Valeurs.YT = 0;
  • Valeurs.XTroot = 0;
  • Valeurs.YTroot = 0;
  • Valeurs.Xvecteur = 0;
  • Valeurs.Yvecteur = 0;
  • Valeurs.angle = 0;
  • calcul(point);
  • }
  • function dessinTrait() {
  • PPoint.x = Valeurs.XOroot;
  • PPoint.y = Valeurs.YOroot;
  • globalToLocal(PPoint);
  • if (Valeurs.init == true) {calcul(PPoint);}
  • }
  • function calcul(A) {
  • if (Valeurs.init == true){
  • A.x = A.x/echelle;
  • A.y = A.y/echelle;
  • //position milieu du cercle
  • I = new Object();
  • I.x = A.x/2;
  • I.y = A.y/2;
  • //variable de position
  • M = new Object();
  • M.x = 0;
  • M.y = 0;
  • // point que l'on cherche
  • Mmin = new Object();
  • Mmin.x = 0;
  • Mmin.y = 0;
  • // debut des calculs***********************************************************
  • RayonCercle = (I.x*I.x+I.y*I.y);
  • rayon = 30/echelle;
  • calmin = 50000;
  • if (RayonCercle>2*rayon) {
  • for (angle=0; angle<70; angle++) {
  • M.x = rayon*Math.cos(angle/10);
  • M.y = rayon*Math.sin(angle/10);
  • cal = Math.sqrt(Math.abs((Math.pow((M.x-I.x), 2)+Math.pow((M.y-I.y), 2)-(RayonCercle))));
  • if (cal<calmin) {
  • // on teste les positions de cadrant**************************************************
  • if (A.x<0 && A.y<0) {
  • if (A.y <-rayon && A.x<-rayon && M.x>0 && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y>-rayon && A.x<-rayon && M.x<0 && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y<-rayon && A.x>-rayon && M.x>0 && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • }
  • if (A.x<0 && A.y>0) {
  • if (A.y<rayon && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y>rayon && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.x>-rayon && M.y>0 && M.x<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • }
  • if (A.x>0 && A.y>0) {
  • if (A.y>rayon && A.x>rayon && M.x<0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y<rayon && A.x>rayon && M.x>0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y>rayon && A.x<rayon && M.x<0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • }
  • if (A.x>0 && A.y<0) {
  • if (A.y<-rayon && A.x>rayon && M.x>0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y<-rayon && A.x<rayon && M.x>0 && M.y<0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y<-rayon && A.x<rayon && M.x>0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • if (A.y>-rayon && A.x>rayon && M.x<0 && M.y>0) {
  • calmin = Math.abs(cal);
  • Mmin.x = M.x;
  • Mmin.y = M.y;
  • }
  • }
  • }}
  • // on verfie que le calcul est fait
  • if (Mmin.x != 0 or Mmin.y != 0 or Math.abs(Valeurs.XO)>50 or Math.abs(Valeurs.YO)>50 ) {
  • Valeurs.XO = A.x*echelle;
  • Valeurs.YO = A.y*echelle;
  • point.x = Valeurs.XO;
  • point.y = Valeurs.YO;
  • localToGlobal(point);
  • Valeurs.XOroot = point.x;
  • Valeurs.YOroot = point.y;
  • Valeurs.XT = Mmin.x*echelle;
  • Valeurs.YT = Mmin.y*echelle;
  • //point = new Object();
  • point.x = Valeurs.XT;
  • point.y = Valeurs.YT;
  • localToGlobal(point);
  • Valeurs.XTroot = point.x;
  • Valeurs.YTroot = point.Y;
  • Valeurs.longeur = Math.sqrt(Math.pow((Valeurs.XO-Valeurs.XT), 2)+Math.pow((Valeurs.YO-Valeurs.YT), 2));
  • Valeurs.force=Valeurs.forceInitiale+(Valeurs.longeur-Valeurs.longeurInitiale)/80;
  • Valeurs.Xvecteur = - Valeurs.force*(Valeurs.XO-Valeurs.XT)/Valeurs.longeur;
  • Valeurs.Yvecteur = -Valeurs.force*(Valeurs.YO-Valeurs.YT)/Valeurs.longeur;
  • Valeurs.angle= Math.acos((Valeurs.XO-Valeurs.XT)/Valeurs.longeur);
  • if ((Valeurs.XO>Valeurs.XT) and (Valeurs.YO < Valeurs.YT)) {Valeurs.angle=-Valeurs.angle;}
  • if ((Valeurs.XO<Valeurs.XT) and (Valeurs.YO < Valeurs.YT)) {Valeurs.angle=6.28-Valeurs.angle;}
  • this.dynamo.rot=Valeurs.force*360/8;
  • this.doigtoc._rotation=Valeurs.force*360/8;
  • this.createEmptyMovieClip("Rayons", premier);
  • this.Rayons.lineStyle(2, 0x999999);
  • this.Rayons.moveTo(Valeurs.XT, Valeurs.YT);
  • this.Rayons.lineTo(Valeurs.XO, Valeurs.YO);
  • this.pointDeplace._x = Valeurs.XO;
  • this.pointDeplace._y = Valeurs.YO;
  • _root.dessinvecteurresultant();
  • //_root[dyn].createEmptyMovieClip("vecteur"+dyn, premier-1);
  • //_root[dyn]["vecteur"+dyn].lineStyle(2, 0x999999);
  • }
  • }
  • }}
stop();

var Valeurs = new Object; 
var PPoint = new Object();
var point = new Object;
var echelle = 10;
var i=0;

initialisation();

function initialisation()
{
//point =new Object();
	 point.x =-20;
	 point.y = 20;
Valeurs.init=false;	
Valeurs.forceInitiale=0;
Valeurs.force = 0;
Valeurs.longeurInitiale =1;
Valeurs.longeur=1;
Valeurs.XO = 0;
Valeurs.YO = 0;
Valeurs.XOroot = point.x;
Valeurs.YOroot = point.y;
Valeurs.XT = 0;
Valeurs.YT = 0;
Valeurs.XTroot = 0;
Valeurs.YTroot = 0;
Valeurs.Xvecteur = 0;
Valeurs.Yvecteur = 0;
Valeurs.angle = 0;
calcul(point);
}



function dessinTrait() {
		
	PPoint.x = Valeurs.XOroot;
	PPoint.y = Valeurs.YOroot;
	globalToLocal(PPoint);
	if (Valeurs.init == true) {calcul(PPoint);}
}


function calcul(A) {
	
	if (Valeurs.init == true){
	A.x = A.x/echelle;
	A.y = A.y/echelle;
	//position milieu du cercle
	I = new Object();
	I.x = A.x/2;
	I.y = A.y/2;
	//variable de position 
	M = new Object();
	M.x = 0;
	M.y = 0;
	// point que l'on cherche
	Mmin = new Object();
	Mmin.x = 0;
	Mmin.y = 0;
	// debut des calculs***********************************************************
	RayonCercle = (I.x*I.x+I.y*I.y);
	rayon = 30/echelle;
	calmin = 50000;
	if (RayonCercle>2*rayon) {
		for (angle=0; angle<70; angle++) {
			M.x = rayon*Math.cos(angle/10);
			M.y = rayon*Math.sin(angle/10);
			cal = Math.sqrt(Math.abs((Math.pow((M.x-I.x), 2)+Math.pow((M.y-I.y), 2)-(RayonCercle))));
			
			if (cal<calmin) {
				// on teste les positions de cadrant**************************************************
				if (A.x<0 && A.y<0) {
					
					if (A.y <-rayon && A.x<-rayon && M.x>0 && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y>-rayon && A.x<-rayon && M.x<0 && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y<-rayon && A.x>-rayon && M.x>0 && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
				}
				if (A.x<0 && A.y>0) {
					if (A.y<rayon && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y>rayon && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.x>-rayon && M.y>0 && M.x<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
				}
				if (A.x>0 && A.y>0) {
					if (A.y>rayon && A.x>rayon && M.x<0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
				
					if (A.y<rayon && A.x>rayon && M.x>0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
									
					if (A.y>rayon && A.x<rayon && M.x<0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
				}
				if (A.x>0 && A.y<0) {
					if (A.y<-rayon && A.x>rayon && M.x>0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y<-rayon && A.x<rayon && M.x>0 && M.y<0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y<-rayon && A.x<rayon && M.x>0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
					if (A.y>-rayon && A.x>rayon && M.x<0 && M.y>0) {
						calmin = Math.abs(cal);
						Mmin.x = M.x;
						Mmin.y = M.y;
					}
				}
			}}
			// on verfie que le calcul est fait	
			if (Mmin.x != 0 or Mmin.y != 0 or Math.abs(Valeurs.XO)>50 or Math.abs(Valeurs.YO)>50 ) {
				Valeurs.XO = A.x*echelle;
				Valeurs.YO = A.y*echelle;
			
	
				point.x = Valeurs.XO;
				point.y = Valeurs.YO;
				localToGlobal(point);
				
				Valeurs.XOroot = point.x;
				Valeurs.YOroot = point.y;
				Valeurs.XT = Mmin.x*echelle;
				Valeurs.YT = Mmin.y*echelle;
				
				//point = new Object();
				point.x = Valeurs.XT;
				point.y = Valeurs.YT;
				localToGlobal(point);
				
				Valeurs.XTroot = point.x;
				Valeurs.YTroot = point.Y;
				
				Valeurs.longeur = Math.sqrt(Math.pow((Valeurs.XO-Valeurs.XT), 2)+Math.pow((Valeurs.YO-Valeurs.YT), 2));
			   
			   Valeurs.force=Valeurs.forceInitiale+(Valeurs.longeur-Valeurs.longeurInitiale)/80;
				Valeurs.Xvecteur = - Valeurs.force*(Valeurs.XO-Valeurs.XT)/Valeurs.longeur;
				Valeurs.Yvecteur =  -Valeurs.force*(Valeurs.YO-Valeurs.YT)/Valeurs.longeur;
				Valeurs.angle= Math.acos((Valeurs.XO-Valeurs.XT)/Valeurs.longeur);
				if ((Valeurs.XO>Valeurs.XT) and (Valeurs.YO < Valeurs.YT)) {Valeurs.angle=-Valeurs.angle;}
				if ((Valeurs.XO<Valeurs.XT) and (Valeurs.YO < Valeurs.YT)) {Valeurs.angle=6.28-Valeurs.angle;}
				
				this.dynamo.rot=Valeurs.force*360/8;
				this.doigtoc._rotation=Valeurs.force*360/8;
				
				this.createEmptyMovieClip("Rayons", premier);
				this.Rayons.lineStyle(2, 0x999999);
				
				
				this.Rayons.moveTo(Valeurs.XT, Valeurs.YT);
				this.Rayons.lineTo(Valeurs.XO, Valeurs.YO);	
				
				this.pointDeplace._x = Valeurs.XO;
				this.pointDeplace._y = Valeurs.YO;
				_root.dessinvecteurresultant();
				
				//_root[dyn].createEmptyMovieClip("vecteur"+dyn, premier-1);
				//_root[dyn]["vecteur"+dyn].lineStyle(2, 0x999999);
			
		}
	}
}}

 Conclusion

bonjour,
voici ma premiere vrai animation
avec un code un peu broullion qui s'est construit au fur et à mesure des besoins de l'annimation.
je n'ai pas d'idées pour ammeliorer le code.
si vous en avez, merci d'avance.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

05 juin 2005 20:04:42 :
ajout d'explication

 Sources du même auteur

Source avec Zip Source avec une capture EXEMPLE DE FLOCON DE VONKOCHE

 Sources de la même categorie

Source avec Zip Source avec une capture OUVRIR UNE ANIMATION EXTERNE DANS UN CLIP VIDE. par KcHeY
Source avec Zip ZOOM SUR UNE IMAGE par yasdar
Source avec Zip Source avec une capture UN PEU DE MATH par yasdar
Source avec Zip Source avec une capture PARTICULE SYSTEM par yasdar
Source avec Zip Source avec une capture GALLERIE PHOTO AVEC XML par yasdar

Commentaires et avis

Commentaire de SuperDevy le 05/06/2005 23:09:20

C'est pas trop mal pour un premier jet, c'est domage qu'il y ai autant de testes similaires : il serait plus habille de créer un prototype ou une classe force que tu réutiliserai à volontée.

var Valeurs = new Object; <- t'as oublié des ()

Commentaire de mathadore le 06/06/2005 07:21:02

à quoi servent les () puisque le code marche?

je ne sais pas ce qu'est un prototype?

par avance merci pour les explications.

Commentaire de BananaTree le 06/06/2005 13:49:12

slt,
en fait ça marche parce que tu ne fait pas appel à la fonction constructeur d'une classe perso.
mais ne pas mettre de parenthèse est implicitement incorecte si tu fais de l'objet. (je te renvoies à l'entrée new dans la doc de flash).
Concernant les prototypes, il s'agit d'un spécification de la norme ECMA 262.
il se trouve qu'en action script, c'est la base de la poo. (même si ça à été lamentablement merdicalisé par as2).

@+ et bon code.

 Ajouter un commentaire




Nos sponsors


Sondage...

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 : 1,014 sec (3)

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