begin process at 2012 05 26 06:34:27
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > "LE PENDULE" OU "COMMENT SIMULER LA RECHERCHE D'ÉQUILIBRE"

"LE PENDULE" OU "COMMENT SIMULER LA RECHERCHE D'ÉQUILIBRE"


 Information sur la source

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

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Niveau :Initié Date de création :30/07/2004 Vu / téléchargé :108 757 / 761

Auteur : SuperDevy

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

 Description

Sur le même principe que la vieille balance de ma grand-mère, vous mettez des poids (en cliquant sur l'anim') et le système s'équilibre.
L'idée ne vient pas de moi mais le code m'est entièrement personnel.
Ce code peut servir à la création d'un petit jeu dont le but est de trouver l'équilibre...

L'algorithme fait appel à des lois mécaniques sur le Moment de rotation.

Source

  • stop();
  • // Paramétres :
  • Cm = 4/10000; // Coef. mécanique
  • Cx = 0.85; // Coef. de frottement
  • // Valeur initiale : vitesse de rotation
  • vit_rot = 0;
  • // Variables d'incrémentation pour la création des Poids.
  • premier = dernier=10;
  • // Création du clip vide pour le dessin des rayons.
  • this.createEmptyMovieClip("Rayons", premier);
  • this.Rayons.lineStyle(1, 0x999999);
  • //
  • //---------------------------------------------
  • // Création d'un nouveau poids au moment d'un clique :
  • this.onMouseDown = function() {
  • // Incrémentation pour création du poids suivant.
  • dernier++;
  • // Position du nouveau poids.
  • pointeur = new Object();
  • pointeur.x = _root._xmouse;
  • pointeur.y = _root._ymouse;
  • globalToLocal(pointeur);
  • // Création d'un nouveau poinds : voir l'objet "Poids" dans la bibliothéque.
  • this.attachMovie("Poids", "Poids"+dernier, dernier);
  • this["Poids"+dernier]._x = pointeur.x;
  • this["Poids"+dernier]._y = pointeur.y;
  • this["Poids"+dernier].masse = 50;
  • // Dessin du rayon issus du nouveau poids.
  • this.Rayons.moveTo(0, 0);
  • this.Rayons.lineTo(pointeur.x, pointeur.y);
  • delete pointeur;
  • };
  • // Rotation du pendule en fonction de ses poids :
  • this.onEnterFrame = function() {
  • // Calcul de l'accélération instantanée.
  • acc_rot = 0;
  • lieu = new Object();
  • for (i=premier+1; i<=dernier; i++) {
  • lieu.x = this["Poids"+i]._x;
  • lieu.y = this["Poids"+i]._y;
  • this.localToGlobal(lieu);
  • moment = (lieu.x-this._x)*this["Poids"+i].masse;
  • acc_rot += moment*Cm;
  • }
  • // Calcul de la vitesse instantanée (ajout du frottement)
  • vit_rot += acc_rot;
  • vit_rot *= Cx;
  • // Adaptation à l'angle de rotation.
  • this._rotation += vit_rot;
  • };
stop();
// Paramétres :
Cm = 4/10000; // Coef. mécanique
Cx = 0.85;    // Coef. de frottement
// Valeur initiale : vitesse de rotation
vit_rot = 0;
// Variables d'incrémentation pour la création des Poids.
premier = dernier=10;
// Création du clip vide pour le dessin des rayons.
this.createEmptyMovieClip("Rayons", premier);
this.Rayons.lineStyle(1, 0x999999);
//
//---------------------------------------------
// Création d'un nouveau poids au moment d'un clique :
this.onMouseDown = function() {
    // Incrémentation pour création du poids suivant.
    dernier++;
    // Position du nouveau poids.
    pointeur = new Object();
    pointeur.x = _root._xmouse;
    pointeur.y = _root._ymouse;
    globalToLocal(pointeur);
    // Création d'un nouveau poinds : voir l'objet "Poids" dans la bibliothéque.
    this.attachMovie("Poids", "Poids"+dernier, dernier);
    this["Poids"+dernier]._x = pointeur.x;
    this["Poids"+dernier]._y = pointeur.y;
    this["Poids"+dernier].masse = 50;
    // Dessin du rayon issus du nouveau poids.
    this.Rayons.moveTo(0, 0);
    this.Rayons.lineTo(pointeur.x, pointeur.y);
    delete pointeur;
};
// Rotation du pendule en fonction de ses poids :
this.onEnterFrame = function() {
    // Calcul de l'accélération instantanée.
    acc_rot = 0;
    lieu = new Object();
    for (i=premier+1; i<=dernier; i++) {
        lieu.x = this["Poids"+i]._x;
        lieu.y = this["Poids"+i]._y;
        this.localToGlobal(lieu);
        moment = (lieu.x-this._x)*this["Poids"+i].masse;
        acc_rot += moment*Cm;
    }
    // Calcul de la vitesse instantanée (ajout du frottement)
    vit_rot += acc_rot;
    vit_rot *= Cx;
    // Adaptation à l'angle de rotation.
    this._rotation += vit_rot;
};

 Conclusion

Vu sur http://bit-101.com/

 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


 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

AS3 - CHARGER UNE IMAGE EXTERNE, L'UTILISER PLUSIEURS FOIS (... par SuperChouquette
Source avec Zip Source avec une capture PHP COUNTER EVOLUTION par top30
Source avec Zip DISTRIBUTION D'OBJETS par top30
Source avec Zip Source avec une capture MULTI-DEBRID par remy2501
Source avec Zip Source avec une capture MODE CONSOLE DE LINUX par tipharris

Commentaires et avis

Commentaire de top30 le 30/07/2004 21:45:18

C'est pas mal du tout... Et cest normal que ca ressemnle étrangement a une source de "bit101" ???

J'attend ta réponse pour noter...

= (
= )

Sinon ca fait tres "physique" j 'adore....

Commentaire de SuperDevy le 30/07/2004 21:52:24

Exact, j'ai assayer de reproduire une source de bit-101. Mais je redis que le code est entièrement de moi.

Pour cette source, j'ai relu mes cours de Méca de Terminale S : Les formules utilisées sont rigoureusement celles marquées dans mon cours.

La cohérence physique laisse encore à désirer : et oui, 1px c'est différent de 1m !

Commentaire de bouffard le 31/07/2004 02:31:14

Bonjour,

Moi, je trouve l'animation très.

Simple suggestion, il serait peut-être intéressant de savoir combien des poids sont mis sur l'animation, et peut-être de mettre les coordonnées de la souris, sa aiderait pour mettre les poids.

Et peut-être rajouté différent pesenteur de poids.

Comme tu le dis si bien, sa laisse plase à un jeu.

Bravo,  7/10 simple et efficace.

_______________
Bouffard

Commentaire de top30 le 01/08/2004 00:09:39

8/10

Essaie de voir si en restant clicquer on pouurait pas grossir le point et donc son poids...

Ca deviendrait aussi bone que celle de Bit101.. Et c est pas peut dire !

Commentaire de BlackWizzard le 21/08/2004 01:56:48 administrateur CS

marrant :)
tu nous code quand un moteur physique?

Commentaire de SuperDevy le 25/08/2004 13:49:29

Qu'est-ce que tu entends par "moteur physique" ?
Tu voudrais un truc plus réaliste ou une série de classes ou de fonctions pour simuler la nature ?

Commentaire de BlackWizzard le 29/08/2004 20:11:12 administrateur CS

un moteur du style de celui du jeux 'N' ;)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

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,265 sec (3)

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