Un peu de physique: solide soumis à 3 forces

Soyez le premier à donner votre avis sur cette source.

Vue 13 082 fois - Téléchargée 1 823 fois

Description

exemple de systeme soumis à 3 forces pour montrer que la somme vectorielle de ces 3 forces est nulle à l'equilibre du systeme.

Source / Exemple :


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.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

SuperDevy
Messages postés
842
Date d'inscription
dimanche 24 novembre 2002
Statut
Membre
Dernière intervention
2 juillet 2007
-
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 ()
mathadore
Messages postés
7
Date d'inscription
lundi 9 août 2004
Statut
Membre
Dernière intervention
25 octobre 2005
-
à quoi servent les () puisque le code marche?

je ne sais pas ce qu'est un prototype?

par avance merci pour les explications.
BananaTree
Messages postés
337
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2010
-
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.

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.

Du même auteur (mathadore)