Un peu de physique: solide soumis à 3 forces

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

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)