Vous n'êtes pas identifié.
Salut à tous!
Dans une fonction rappelée indéfiniment par un setTimeout, j'aimerais y effectuer une multiplication comme par exemple:
nombre *= Math.sin(nombre / 2);
ou encore
nombre *= 2;
Le problème est que ces opérations ne sont pas effectuées. Pourquoi?
Quelqu'un aurait-il une explication à ce problème?
Code entier:
function animate_0(){
var intLimit = 360;
if (this.animate_0_direction == 0) {
if (this.animate_0_variation < intLimit) {
this.animate_0_variation += Math.sin(this.animate_0_variation / 2); // Ne s'effectue pas?
}
else {
this.animate_0_direction = 1;
}
}
else {
if (this.animate_0_direction == 1) {
if (this.animate_0_variation > 0)
this.animate_0_variation--;
else
this.animate_0_direction = 0;
}
}
redraw_childs(this.animate_0_variation);
objAnimation = setTimeout("animate_0()", intRefresh);
}
Projet auquel cela servira (juste pour les curieux): http://cisoun.serveftp.net/CircleScript/index.html
Dernière modification par Cisoun (23 Jun 2008 17:14:27)
Hors ligne
Salut
Pourquoi ce this.animate_0_variation, est-ce que tu veux atteindre un objet?
Ci-dessous ma proposition à tester :
function animate_0(obj) { var intLimit = 360; if (obj.animate_0_direction == 0) { if (obj.animate_0_variation < intLimit) { obj.animate_0_variation += Math.sin(obj.animate_0_variation / 2); // Ne s'effectue pas? } else { obj.animate_0_direction = 1; } } else { if (obj.animate_0_direction == 1) { if (obj.animate_0_variation > 0) obj.animate_0_variation--; else obj.animate_0_direction = 0; } } redraw_childs(obj.animate_0_variation); objAnimation = setTimeout("animate_0(obj)", intRefresh); // petit doute sur le passage de paramètre
En fait, qu'est-ce que tu veux faire?
Meilleures salutations.
Jean Tinguely Awais.
Hors ligne
Merci pour ton aide.
J'ai oublié de le préciser, animate_0_variation est déclaré à 0 et au début du fichier javascript.
Après quelques essais, il se peut aussi que ce soit une erreur de mathématique.
Je vais essayer d'expliquer la chose.
Cette fonction est censé faire tourner la roue d'un tour complet puis de la faire revenir dans l'autre sens tout en accélérant au début de la rotation puis ralentissant à la fin et ceci à chaque tour.
animate_0_variation n'est en fait que l'angle courant de la roue lors de chaque appel de la fonction.
Lorsque celle-ci est appelée, animate_0_variation est (pour le moment) dé/incrémentée puis la roue va tourner selon cette variable qui représente l'angle.
animate_0_direction quand à lui, précise le sens de la rotation.
À 0, la roue tourne vers la droite.
À 1, la roue tourne vers la gauche.
Le script est ici: http://cisoun.serveftp.net/CircleScript … escript.js (les commentaires ne sont peut-être pas dans le meilleur anglais...)
(Désolé si le script est inaccessible, c'est que mon PC n'est pas en marche. Il l'est en général l'après-midi jusqu'à 18 heures et parfois le soir).
Dernière modification par Cisoun (19 Jun 2008 23:02:20)
Hors ligne
Salut,
Un peu d'inspiration : http://www.walterzorn.com/rotate_img/rotate_img.htm
Il faut que tu fasses des images pour chaque angle que la roue va prendre. Il n'existe pas, à ma connaissance, de fonction rotate pour une image ou un css dans ecmascript.
http://www.ecmascript.org/
Par contre IE à partir de 5.5 peut utiliser un activeX pour faire tourner des images à l'aide jscript, comme ici :
http://elouai.com/javascript/javascript … rotate.php
Meilleures salutations.
Jean Tinguely Awais.
Hors ligne
Merci ça a l'air interessant! Je vais voir ce que je peux en faire.
Mais pour cette fonction je vais juste me contenter d'un déplacement de chaque objet sur le bord du cercle.
Hors ligne
Salut,
Je pensais que tu voulais faire tourner une roue, mais dans ce cas, tu recalcule la position des div ou des images sur le bord d'un cercle. Tu pourais envisager de passer par des coordonnées "polaires" pour décrire ton cercle:
xdiv0=x_origine+rayon_cercle*cos(angle_div0)
ydiv0=x_origine+rayon_cercle*sin(angle_div0)
pour placer tes objets, ton angle varie en fonction du temps selon une formule quelconque et il est la seule valeur importante pour le redisign de ta roue.
Est-ce que je t'ai quelque peu aidé?
Meilleures salutations.
Jean Tinguely Awais.
Edit:
Un essai de mon cru : http://www.t-servi.com/testWheel.html
Dernière modification par jean@adimp.ch (20 Jun 2008 15:03:13)
Hors ligne
Ta fonction a l'air déjà plus balèze que la mienne.
Par contre ma roue tourne. Tout ce que je cherche à faire, c'est que lorsqu'elle commence à faire la rotation, elle accélère puis ralentisse lorsqu'elle va se mettre à tourner dans le sens inverse.
Hors ligne
ben tu fais varier ton horaire selon la formule de base
x(t) = 1/2 * a * t^2 + v0 * t + x0
c'est pas bien compliqué il me semble :-)
Hors ligne
Salut,
@[GO]Skywalker13 : souvenir, souvenir
@Cisoun : le code de la fonction actuelle est simple, tu peux regarder la source, tout est dans le même fichier ( je sais, c'est mal! ). Pour l'instant le changement de sens se fait à l'aide d'une variable. Il "suffit" de rajouter une accélération rotationelle au calcul de la position, pas trop envie de le faire ce soir!
Meilleures salutations.
Jean Tinguely Awais.
Hors ligne
Oui j'y ai pensé justement.
Ceci dit, je vais continuer à chercher un truc qui tient bien et puis mon script est loin d'être fini.
Merci de votre aide!
Hors ligne
Salut,
Ce matin je me suis levé bien moins tôt que toi, mais pas mal en forme : http://www.t-servi.com/testWheel.html
C'est quelque chose de ce style que tu aimerais?
Meilleures salutations.
Jean Tinguely Awais.
Edit: en fait, dans ton cas, tu aimerais une accélération rotationelle sinusoidale. Ce qui n'est pas le cas dans mon exemple.
Edit 2 : En théorie, tu n'a même pas besoin de la vitesse pour le calcul de l'angle tu peux simplifier l'équation, c'est plus pratique pour les réglages fin
==> position angulaire = sin(facteur * temps) * facteur de correction + déphasage
Est-ce que ça t'aide?
Edit 3:
Et voilà : http://www.t-servi.com/testWheel.html
OK comme ça?
Dernière modification par jean@adimp.ch (21 Jun 2008 09:40:09)
Hors ligne
jean@adimp.ch a écrit:
Edit: en fait, dans ton cas, tu aimerais une accélération rotationelle sinusoidale. Ce qui n'est pas le cas dans mon exemple.
Dans ce cas je dirais plutôt qu'il veut une vitesse qui varie en sinus et donc l'accélération angulaire qui en est la dérivée devient un cosinus.
Toi tu as fais l'inverse mais bon.. c'est égale.. bien que c'est plus joli je pense de voir partir les mobiles avec une vitesse de 0 au temps 0.
Hors ligne
Cisoun a écrit:
J'ai oublié de le préciser, animate_0_variation est déclaré à 0 et au début du fichier javascript.
J'ai pas vu si ça a été dit, parce que j'ai lu mais en diagonale, mais dans ce cas, pas de this...
Si tu veux faire de l'orienté objet, faut faire un truc comme ça :
function ClassName(args) { this.var1 = var1; this.var2 = var2; } ClassName.prototype.getVar1 = function() { return this.var1; } ClassName.prototype.setVar1 = function(value) { this.var1 = value; }
Hors ligne
@jean@adimp.ch: Bien vu! C'est exactement cela.
Si je puis me permettre, je vais jeter un petit coup d'oeil à ton code.
Edit:
Je viens de regarder ton code et je me rends compte que je me suis bien embêté pour positionner les éléments.
C'est vrai que le newX=x0+radius*Math.cos(angle); et le newY=y0+radius*Math.sin(angle); sont déjà plus pratiques.
Mais dans certains cas, pour moi, les maths c'est pas encore ça.
Dernière modification par Cisoun (21 Jun 2008 15:36:15)
Hors ligne
Salut,
Expérience faite, pour tout mouvements circulaires ( grande roue, horloges, ... ), les coordonnées polaire sont le moyen le plus économique de décrire la position en fonction du temps. C'est LE truc. Et en fait c'est hyper simple et utilisé dans plein de domaines. Pour plus d'informations tu peux te reporter ici : http://fr.wikipedia.org/wiki/Coordonn%C3%A9es_polaires
Meilleures salutations.
Jean Tinguely Awais.
Edit : est-ce que le problème est résolu?
Dernière modification par jean@adimp.ch (23 Jun 2008 13:13:53)
Hors ligne
Hors ligne
Salut,
Ton problème m'a inspiré un article : http://developpeur.mediabox.fr/index.ph … opic=24025
Tout de bon.
Hors ligne
Très sympa, toutefois les exemples 3 et 4 s'exécutent trop rapidement chez moi.
Hors ligne
Salut,
Il est possible de diminuer la cadence du mouvement en remplaçan sin(temps) par un sin(0.0001*temps).
Meilleures salutations.
Jean Tinguely Awais.
Hors ligne
Salut,
Je me suis permit de remettre une couche d'article sur knol :
http://knol.google.com/k/jeantinguelyaw … 1oa/2#view
Meilleures salutations.
Hors ligne