calcul de vitesse javascript

Voir le sujet précédent Voir le sujet suivant Aller en bas

Résolu calcul de vitesse javascript

Message par Gaët'#5 le Lun 8 Fév 2016 - 11:40

Détails techniques


Version du forum : phpBB3
Poste occupé : Administrateur
Navigateur(s) concerné(s) : Mozilla Firefox
Personnes concernées par le problème : Tous les utilisateurs
Lien du forum : http://pic-trail.com/

Description du problème

Bonjour, je viens vers vous afin d'obtenir de l'aide pour un code javascript.

Je souhaite installer sur mon site un bloc permettant de calculer une vitesse moyenne. Ce bloc reprend les infos inscrites par l'utilisateur dans un formulaire et calcul la vitesse moyenne en postant un message sur le forum.

Voici mon code. Je pense que le problème vient de ma fonction qui doit calculer cette vitesse moyenne en km/h. Cependant je ne trouve pas la solution.

Mon code:
Code:
<head>
<style type="text/css">
body {
background-color: #90E010;
}
form {
font-size: 12px;
width: 300px;
margin-left:auto;
margin-right:auto;
background-image: url("http://i68.servimg.com/u/f68/19/38/41/03/wood-b10.jpg");
background-repeat: repeat;
border: 1px solid black;
border-radius: 10px 10px 10px 10px;
box-shadow:4px 4px 4px gray,
-1px -1px 4px white;
}
fieldset{
margin-left:auto;
margin-right:auto;
text-align:center;
}
legend,p {
font-family: Monotype Corsiva;
text-align:center;
padding-left:20px;
padding-right:20px;
color: #531014;
font-size: 24px;
}
.left td{
text-align:right;
width:250px;
}
.left td+td {text-align:left}
</style>

<script type="text/javascript">
function envoiMessage(form)
{
// Créer un message à partir des informations fournies
var nomTrail = form.NomTrail.value
var d = form.d.value
var h = form.h.value
var m = form.m.value
var s = form.s.value
 
var txt_message ="<br><div style="width:390px;height:70px;margin-left:30px;text-align:right;"><br><br><br><span style="font-size: 29px;font-family:Monotype Corsiva;color: #531014;">" + NomTrail + "</span></div><br><br>"
+ "[b]Nom du trail : [/b]" + NomTrail + '\n'
+ "[b]Distance : [/b]" + d + '\n'
+ "[b]Heures : [/b]" + h + '\n'
+ "[b]Minutes [/b]" + m + '\n'
+ "[b]Secondes : [/b]" + s + '\n';

// Insère le texte construit dans le champ caché "message" du formulaire
form.message.value = txt_message;
form.subject.value = "" + NomTrail ;
}

// ICI LA FONCTION PERMETTANT DE FAIRE "d" divisé par "h","m","s"

</script>
</head>

<body>

<form action="/post" method="post" name="post" enctype="multipart/form-data" onSubmit="envoiMessage(this)" >
<input type="hidden" name="lt" value="0" />
<input type="hidden" name="mode" value="newtopic" /> <!-- Un nouveau topic sera créé -->
<input type="hidden" name="topictype" value="0" checked="checked" /> <!-- Value 0: Sujet Normal (1 = Note / 2 = annonce) -->
<input type="hidden" name="message" value="" /> <!-- Contiendra le texte du message -->
<input type="hidden" name="f" value="2" /> <!--  ID du forum dans lequel le message sera posté -->
<input type="hidden" name="subject" id="titre" value="" /> <!-- titre du sujet  -->


<fieldset><legend ><p>Calculez la vitesse moyenne</p> </legend>
<table class="left">
<tr><td><label for="NomTrail"><center>Nom de la course :</center></label></td>
<td><input type="text" name="NomTrail" id="NomTrail" size="17" maxlength="30" placeholder="Apparaitra comme titre " /></td></tr>

<tr><td><label for="distance">Distance :</label></td>
<td><input type="text" name="d" id="d" size="3" maxlength="5" placeholder="En km" /></td></tr>
   
<tr><td><label for="hour">Temps de course :</label></td>
<td><input type="text" placeholder="heures" name="h" id="h" size="3" maxlength="2" /></td></tr>
   
<tr><td><label for="minute">Minutes :</label></td>
<td><input type="text" placeholder="minutes" name="m" id="m" size="3" maxlength="2" /></td></tr>
            
<tr><td><label for="second">Secondes :</label></td>
<td><input type="text" placeholder="secondes" name="s" id="s" size="3" maxlength="2" /></td></tr>
</table>

<br />                 
<input type="submit" name="post" value="Calculer !" />
<br />
</fieldset>
      
</form>

</body>

Pour voir un apercu de mon code à ce niveau :

http://www.pic-trail.com/h1-page-de-test

Merci


Dernière édition par Gaët'#5 le Ven 12 Fév 2016 - 13:34, édité 2 fois

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Neptunia le Lun 8 Fév 2016 - 12:33

Bonjour ^^


J'ai du mal à comprendre votre demande !

@Gaët'#5 a écrit:Voici mon code. Je pense que le problème vient de ma fonction qui doit calculer cette vitesse moyenne en km/h. Cependant je ne trouve pas la solution.
C'est quoi au juste le problème ? Le message ne se poste pas comme il faut ?

Quant à la fonction qui doit calculer la vitesse moyenne, j'ai beau chercher, je ne la trouve pas.
Si c'est un problème de javascript, je ne pourrai rien pour vous, votre niveau semblant nettement supérieur au mien.
Si le problème est juste une question de mathématiques, là je peux vous faire le calcul

d = distance en kms
h = heures -> 3600 secondes
m = minutes -> 60 secondes
s = secondes

Voilà les variables que vous avez définies
A ceci je rajouterai une variable t (pour mémoriser le temps total)
t = 3600*h + 60*m +s = temps en secondes
v = d/t*3600

Un petit exemple :
25 kms parcourus en 2h 20m et 20 secondes
d = 25
h = 2
m = 20
s = 20
t = 3600*2 + 20*60 + 20 = 7200 + 1200 + 20 = 8420
t = 8420 secondes
v = 25/8420 * 3600 = 10,689 km/h (arrondi à 3 décimales)

t étant exprimé en secondes v/t donnera une vitesse en km/s. Pour obtenir des km/h on multiplie la vitesse en secondes par 3600 puisqu'une heure compte 3600 secondes.

Neptunia
+ Hyperactif +

Féminin
Messages : 10990
Inscrit(e) le : 08/08/2010

http://www.planet-series.com/
Neptunia a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Mar 9 Fév 2016 - 17:14

Bonjour,

Effectivement en copiant mon code je n'ai pas prit le bon.

La fonction que j'ai codé est celle-ci

Code:
   function getResults(d,h,m,s)
   {
      v == 0
      somme == 0
      h = 0 / 3600
      m = 38 / 60
      d = 10 / 1000
      s = 38
      somme = h + m + s
      v = d / somme
      v = v * 3,6
   return v;
   }

Cependant je débute en javascript et cela ne fonctionne pas :/

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Neptunia le Mar 9 Fév 2016 - 19:21

1/ Telle quelle la fonction de calcul renverra toujours le même résultat puisque vous assignez une valeur définie à chaque variable.
Hors ce qui définit une variable est qu'elle est variable.
Vous devez donc définir vos variables h, m, s et d comme le contenu des champs du formulaire.

2/ Le résultat du calcul sera erroné. Vous divisez vos heures et minutes par 3600 et 60 alors que vous devriez les multiplier.
Il y a une autre erreur qu'on peut démontrer facilement avec cet exemple de 20 km parcourus en 2 heures, ce qui fait 10 km/h

h = 2 * 3600 = 7200
m = 0 * 60 = 0
s = 0
d = 20 / 1000 = 0.02 kms (soit 20 mètres) Right pourquoi transformer 20 km en 20 m ?
somme = h + m + s = 7200
v = d / somme = 0.02 / 7200 = 0.00000277777 = km/s
v = v * 3,6 = 0.00001 c'est à dire 1 cm toutes les 3.6 secondes Mr. Green Right je ne vois pas l'intérêt de calculer la distance parcourue en 3.6 s. Je comprendrais mieux une distance par seconde ou par heure.

Donc soit vous multipliez la distance par 1000 pour obtenir des mètres et une vitesse en m/s, soit vous multipliez votre première vitesse en km/s par 3600 pour obtenir des km/h.

Il y a peut-être des erreurs au niveau javascript (je ne saurais le dire) mais en tout cas il y a des erreurs de calcul. Un ordinateur ne fait jamais d'erreur de calcul, si le résultat n'est pas celui attendu c'est que la personne à l'origine de sa programmation a fait des erreurs.

Neptunia
+ Hyperactif +

Féminin
Messages : 10990
Inscrit(e) le : 08/08/2010

http://www.planet-series.com/
Neptunia a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Mer 10 Fév 2016 - 8:54

Bonjour,
Merci pour votre aide

J'ai pris pour exemple 10km parcouru en 38min38, c'est ce qui explique que les variables sont définies. J'ai tout simplement oublié de l'indiquer dans mon précédent poste.

En effet je veux obtenir des KM/H. J'ai repris une méthode de calcul. J'avoue qu'elle ne me permet pas d'obtenir le résultat escompté.
Mais pour diviser en distance par un temps, et que le temps sera la somme de plusieurs nombres (h+m+S) je suis obligé de convertir (h et m) en seconde.
J'obtiens donc des m/s que je converti ensuite en km/h.
Je ne sais pas pourquoi j'ai indiquer *3,6 avec le recul.

En reprenant toujours le même exemple : 10km en 38min38 :

Code:
      function getResults(d,h,m,s)
      {
          v == 0
          somme == 0
          h = 0 / 3600
          m = 38 / 60
          d = 10 / 1000
          s = 38
          somme = h + m + s
          v = d / somme
          v = v * 3600
      return v;
      }

Après il va me falloir une aide pour corriger le javascript. J'ai des erreurs que je n'arrive pas à corriger seul.


Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.
  • 0

Résolu Re: calcul de vitesse javascript

Message par Neptunia le Mer 10 Fév 2016 - 10:53

Ce message est à lire avec précautions, le javascript et moi ça fait un peu plus de 2, mais il me semble que :
- Chaque instruction devrait se terminer par un point-virgule.
- les variables v et somme sont utilisées sans avoir été déclarées.
- Lignes 48 à 53 du code du premier message, le contenu du texte du futur message devrait figurer sur une seule ligne.




Je n'interviendrai plus sur le sujet afin de laisser la main à des aidants moins incompétents que moi en matière de javascript.




Edité : Je vous suggère tout de même d'éditer :editer: votre premier message et de choisir un titre plus parlant, exemple Calcul de vitesse en javascript.

Neptunia
+ Hyperactif +

Féminin
Messages : 10990
Inscrit(e) le : 08/08/2010

http://www.planet-series.com/
Neptunia a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Mer 10 Fév 2016 - 11:00

Le javascript est différent du CSS.
Les retour à la ligne n'ont aucune incidence sur le code. C'est juste pour que cela soit plus lisible.
Le '/n' permet de faire un saut de ligne quand le message sera réellement affiché.

Pour le point virgule il n'y a pas besoin.

Pour v et somme j'ai également un doute. Je l'ai déclare de la sorte v == 0 somme == 0. Mais j'ai un gros doute. Je vais tester avec jsfiddle.net

Si quelqu'un pouvais m'aider pour la suite, pas de refus.

Merci pour votre aide !

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Jeu 11 Fév 2016 - 11:19

Je fais un up.

Et j'en profite pour poster l'avancé de mon code.

Le formulaire fonctionne très bien. Le voici :

Fomulaire:
Code:
<head>
<style type="text/css">
body {
background-color: #90E010;
}
form {
font-size: 12px;
width: 300px;
margin-left:auto;
margin-right:auto;
background-image: url("http://i68.servimg.com/u/f68/19/38/41/03/wood-b10.jpg");
background-repeat: repeat;
border: 1px solid black;
border-radius: 10px 10px 10px 10px;
box-shadow:4px 4px 4px gray,
-1px -1px 4px white;
}
fieldset{
margin-left:auto;
margin-right:auto;
text-align:center;
}
legend,p {
font-family: Monotype Corsiva;
text-align:center;
padding-left:20px;
padding-right:20px;
color: black;
font-size: 20px;
}
.left td{
text-align:right;
width:250px;
}
.left td+td {text-align:left}
</style>

<script type="text/javascript">
function envoiMessage(form)
{
// Créer un message à partir des informations fournies
var NomTrail = form.NomTrail.value
var d = form.d.value
var h = form.h.value
var m = form.m.value
var s = form.s.value
 
var txt_message ="<br><div style=\"width:390px;height:70px;margin-left:30px;text-align:right;\"><br><br><br><span style=\"font-size: 29px;font-family:Monotype Corsiva;color: #531014;\">" + NomTrail + "</span></div><br><br>"
+ "[b]Nom du trail : [/b]" + NomTrail + '\n'
+ "[b]Distance : [/b]" + d + '\n'
+ "[b]Heures : [/b]" + h + '\n'
+ "[b]Minutes [/b]" + m + '\n'
+ "[b]Secondes : [/b]" + s + '\n';

// Insère le texte construit dans le champ caché "message" du formulaire
form.message.value = txt_message;
form.subject.value = "" + NomTrail ;
}

// ICI LA FONCTION PERMETTANT DE FAIRE "d" divisé par "h","m","s"


</script>
</head>

<body>

<form action="/post" method="post" name="post" enctype="multipart/form-data" onSubmit="envoiMessage(this)" >
<input type="hidden" name="lt" value="0" />
<input type="hidden" name="mode" value="newtopic" /> <!-- Un nouveau topic sera créé -->
<input type="hidden" name="topictype" value="0" checked="checked" /> <!-- Value 0: Sujet Normal (1 = Note / 2 = annonce) -->
<input type="hidden" name="message" value="" /> <!-- Contiendra le texte du message -->
<input type="hidden" name="f" value="2" /> <!--  ID du forum dans lequel le message sera posté -->
<input type="hidden" name="subject" id="titre" value="" /> <!-- titre du sujet  -->


<fieldset><legend ><p>Calculez la vitesse moyenne</p> </legend>
<table class="left">
<tr><td><label for="NomTrail"><center>Nom de la course :</center></label></td>
<td><input type="text" name="NomTrail" id="NomTrail" size="17" maxlength="30" placeholder="Apparaitra comme titre " /></td></tr>

<tr><td><label for="distance">Distance :</label></td>
<td><input type="text" name="d" id="d" size="3" maxlength="5" placeholder="En km" /></td></tr>
   
<tr><td><label for="hour">Temps</label></td>
<td><input type="text" placeholder="heures" name="h" id="h" size="3" maxlength="2" /></td></tr>
   
<tr><td><label for="minute">de&nbsp;&nbsp;&nbsp;</label></td>
<td><input type="text" placeholder="minutes" name="m" id="m" size="3" maxlength="2" /></td></tr>
            
<tr><td><label for="second">course</label></td>
<td><input type="text" placeholder="secondes" name="s" id="s" size="3" maxlength="2" /></td></tr>
</table>

<br />                 
<input type="submit" name="post" value="Calculer !" />
<br />
</fieldset>
      
</form>

</body>

Il me reste juste à faire la fonction permettant de calculer la vitesse moyenne et l'ajoutée au formulaire.

Code:
   function getResults(d,h,m,s)
   {
      v == 0
      somme == 0
      h = h / 3600
      m = m / 60
      d = d / 1000
      s = s
      somme = h + m + s
      v = d / somme
      v = v * 1000
   return v;
   }

Quelqu'un pour m'aider ?

Merci

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par no_way le Jeu 11 Fév 2016 - 11:37

Bonjour, essayez avec cette fonction ci:
Code:
function getResults(d,h,m,s){
  return d/(h+m/60+s/3600);
}



no_way
Aidactif
Aidactif

Messages : 1780
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Jeu 11 Fév 2016 - 11:41

Bonjour no-way.

Peux-tu également m'aider à l'ajouter dans mon code. Et pour que le résultat s'affiche à la ligne 54 sous cette forme :
Code:
"[b]Vittesse moyenne : [/b]" + v + '\n';

Je débute dans le javascript et je n'arrive pas à associer les deux fonctions.

Merci

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par no_way le Jeu 11 Fév 2016 - 23:49

Dans la portion de code que tu viens de donner, remplaces v par:
Code:
getResults(d,h,m,s)

ça devrait fonctionner comme tu le souhaites.



no_way
Aidactif
Aidactif

Messages : 1780
Inscrit(e) le : 26/03/2010

no_way a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Ven 12 Fév 2016 - 10:14

Bonjour no_way,

Voici ce que j’obtiens après avoir cliqué sur calculer :



NaN (Not a Number), comment je peux régler ce problème ?

Mon code:
Code:
<head>
<style type="text/css">
body {
background-color: #90E010;
}
form {
font-size: 12px;
width: 300px;
margin-left:auto;
margin-right:auto;
background-image: url("http://i68.servimg.com/u/f68/19/38/41/03/wood-b10.jpg");
background-repeat: repeat;
border: 1px solid black;
border-radius: 10px 10px 10px 10px;
box-shadow:4px 4px 4px gray,
-1px -1px 4px white;
}
fieldset{
margin-left:auto;
margin-right:auto;
text-align:center;
}
legend,p {
font-family: Monotype Corsiva;
text-align:center;
padding-left:20px;
padding-right:20px;
color: black;
font-size: 20px;
}
.left td{
text-align:right;
width:250px;
}
.left td+td {text-align:left}
</style>

<script type="text/javascript">
function envoiMessage(form)
{
// Créer un message à partir des informations fournies
var NomTrail = form.NomTrail.value
var d = form.d.value
var h = form.h.value
var m = form.m.value
var s = form.s.value
 
var txt_message ="<br><div style=\"width:390px;height:70px;margin-left:30px;text-align:right;\"><br><br><br><span style=\"font-size: 29px;font-family:Monotype Corsiva;color: #531014;\">" + NomTrail + "</span></div><br><br>"
+ "[b]Nom : [/b]" + NomTrail + '\n'
+ "[b]Distance en km : [/b]" + d + '\n'
+ "[b]Heures : [/b]" + h + '\n'
+ "[b]Minutes : [/b]" + m + '\n'
+ "[b]Secondes : [/b]" + s + '\n'
+ "[b]Vitesse moyenne en km/h : [/b]" + getResults(d,h,m,s) + '\n';

// Insère le texte
form.message.value = txt_message;
form.subject.value = "" + NomTrail ;
}

// Fonction de calcul de la vitesse moyenne
    function getResults(d,h,m,s)
   {
      return d/(h+m/60+s/3600);
    }
   
</script>
</head>

<body>

<form action="/post" method="post" name="post" enctype="multipart/form-data" onSubmit="envoiMessage(this)" >
<input type="hidden" name="lt" value="0" />
<input type="hidden" name="mode" value="newtopic" /> <!-- Un nouveau topic sera créé -->
<input type="hidden" name="topictype" value="0" checked="checked" /> <!-- Value 0: Sujet Normal (1 = Note / 2 = annonce) -->
<input type="hidden" name="message" value="" /> <!-- Contiendra le texte du message -->
<input type="hidden" name="f" value="2" /> <!--  ID du forum dans lequel le message sera posté -->
<input type="hidden" name="subject" id="titre" value="" /> <!-- titre du sujet  -->


<fieldset><legend ><p>Calculez la vitesse moyenne</p> </legend>
<table class="left">
<tr><td><label for="NomTrail">Nom :</label></td>
<td><input type="text" name="NomTrail" id="NomTrail" size="21" maxlength="30" placeholder="Apparaitra comme titre " /></td></tr>

<tr><td><label for="distance">Distance :</label></td>
<td><input type="number" min="0" name="d" id="d" size="3" maxlength="5" placeholder="En km" /></td></tr>
   
<tr><td><label for="hour">Temps</label></td>
<td><input type="number" min="0" placeholder="heures" name="h" id="h" size="3" maxlength="2" /></td></tr>
   
<tr><td><label for="minute">de&nbsp;&nbsp;&nbsp;</label></td>
<td><input type="number" min="0" placeholder="minutes" name="m" id="m" size="3" maxlength="2" /></td></tr>
            
<tr><td><label for="second">course</label></td>
<td><input type="number" min="0" placeholder="secondes" name="s" id="s" size="3" maxlength="2" /></td></tr>
</table>

<br />                 
<input type="submit" name="post" value="Calculer !" />
<br />
</fieldset>
      
</form>

</body>

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Résolu Re: calcul de vitesse javascript

Message par Gaët'#5 le Ven 12 Fév 2016 - 13:34

J'ai trouvé la solution, il faut disposer des + devant les form des lignes 43 à 46 de manière à convertir les chaînes de caractères des input, de type texte, en Number.

Gaët'#5
*

Masculin
Messages : 34
Inscrit(e) le : 30/01/2015

http://pic-trail.forum-officiel.com/
Gaët'#5 a été remercié(e) par l'auteur de ce sujet.

Voir le sujet précédent Voir le sujet suivant Revenir en haut


Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum