Accueil > Forum > > > > Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes
Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes
mardi 10 avril 2007 à 11:03:09 |
Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

Darkrats
|
Bonjour à tous. Pour ceux qui voyagent aussi sur le forum Media-box, ce message vous sera peut-être famillié. J'ai un gros problème, voyez-vous, j'ai un script qui déconne et je n'en comprends pas la raison. Voici le problème : J'ai fait un script qui me permet d'obtenir le coefficient angulaire et
le terme indépendant d'une droite passant par deux points donnés. Code : function equationDroite(aInitial:Array, aFinal:Array):Object{ var objet :Object = new Object(); if((aInitial[1] - aFinal[1]) == 0){ objet.orientation = "horizontal"; objet.coefficientAngulaire = 0; objet.termeIndependant = aFinal[1]; }else if((aFinal[0] - aInitial[0]) == 0){ objet.orientation = "vertical"; objet.coefficientAngulaire = 0; objet.termeIndependant = aFinal[0]; }else{ objet.orientation = "oblique"; // Calcul du coéfficiant angulaire de la droite objet.coefficientAngulaire = (aInitial[1] - aFinal[1])/(aInitial[0] - aFinal[0]); // Calcul du terme indépendant de la droite objet.termeIndependant = aInitial[1] - aInitial[0]*objet.coefficientAngulaire; } var var1 :Number = Math.floor(aFinal[0]*objet.coefficientAngulaire); var var2 :Number = Math.floor(aFinal[1] - objet.termeIndependant); // Vérification des valeurs trouvées if(typeof(objet.coefficientAngulaire) != "number" || typeof(objet.termeIndependant) != "number"){ trace("erreur 1"); }else if( objet.orientation == "oblique" && aFinal[1] != ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant)){ trace("erreur 2"); }else{ return(objet); } }
Fin Code (en bleu foncé : le code d'où peut provenir le problème, en gris : le code supplémentaire mais qui n'est pas concerné c'est juste pour
info et enfin en rouge/rose : la vérification qui déconne)
Lorsque je le teste, pas de problème. Sauf (bhein vi sinon je posterais pas), pour certaines valeurs  Par exemple, quand je teste cette fonction avec les valeurs : aInitial = [0, 0] et aFinal = [19.25, 350] Il me renvoit "erreur 2". J'ai essayé de savoir quel étaient les différents résultats et j'obtiens ceci : ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant) = 5.6843418860808e-14 Or, lorsque je lui demande les informations morceaux par morceaux j'obtiens : aFinal[0]*objet.coefficientAngulaire = 350 et objet.termeIndependant = 0;
J'ai essayé de mettre un Math.floor au cas où le problème viendrait de
mauvaises approximations mais j'ai beau tout faire, il veut pas lâcher
! Il continue de me refuser ma condition ... mais le plus bizarre,
c'est que ce n'est pas systématique et que si on regarde c'est correct. Parce que quand j'analyse les termes séparés, j'obtiens bien : 350 et 350 et quand je soustraits les termes entre eux, il me renvoit la valeur 5.6843418860808e-14 alors que (si je ne suis pas trop nul en math) 350 - 350 devrait me donner 0, non ? Ce
terme "5.6843418860808e-14" est en plus considéré comme un chiffre
(pourtant chuis pas bigleux, y a bien une lettre et un - ... je penche
pour un exposant -14 mais chuis pas sûr ... ) Quelqu'un aurait une suggestion ?  J'ai bien envie de bazarder ma vérification mais je tenais à faire ma fonction le plus proprement possible  Pour
info, les chiffres utilisés viennent d'autres scripts mais j'ai isolé
le problème ... ce qui explique les valeurs décimales dans mes
coordonnées. Merci d'avance à tous les fous qui prendront un peu de temps pour décortiquer ce bazard.
--------- Darkrats --------- la loi est dure mais c'est la loi -------- Infograpix --------
|
|
mardi 10 avril 2007 à 18:20:36 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

kingcobra
|
Salut
Ben, déjà y'a un truc trop bisarre dans ton code :
Tu dis aInitial = [0, 0] et aFinal = [19.25, 350] mais ensuite tu fais des calculs sur des tableaux et des flottants...
Par exemple cette ligne, je ne sais même pas comment elle fait pour marcher. Tu multiplies un tableau avec un coefficient ?!!
aFinal[0]*objet.coefficientAngulaire = 350;
Si flash parle en adresse de tableau, c'est normal que tu ais des résultats tout bisarre.
Je m'y penche un peu plus tout à l'heure.
KiNgCoBrA
|
|
mardi 10 avril 2007 à 18:23:11 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

kingcobra
|
OOOps autant pour moi je pensais que c'était des tableau à 2 dimensions...
KiNgCoBrA
|
|
mardi 10 avril 2007 à 18:36:08 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

kingcobra
|
Donc, j'ai testé ta fonction (ça t'aidera peut être) :
Executé avec : equationDroite([0, 0],[19.25, 350]); Voici la trace obtenue :
objet.orientation = oblique
aFinal[1] = 350
calcul = 3500
erreur 2
On a bien une erreur 2 car les termes sont différents ==> la condition renvoie vrai. Tout est normal, ton calcul est il celui que tu veux vraiment ?
KiNgCoBrA
|
|
mercredi 11 avril 2007 à 13:42:27 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

Darkrats
|
Salut, Merci de t'être penché sur mon cas. Je ne comprends pas comment ton calcul vaut 3500. Est-ce bien le résultat de ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant) ? Parce que je n'obtiens pas la même chose que toi ... J'ai retesté la fonction dans un nouveau fichier flash. J'ai modifié le trace dans l'envoi de l'erreur 2 : trace("erreur 2 :: orientation " + objet.orientation + " :: vérification : " + aFinal[1] + " == " + ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant));Voici le résultat obtenu : erreur 2 :: orientation oblique :: vérification : 350 == 350Or, pour moi et quoi qu'en pense Flash, 350 est égal à 350 !!!  Maintenant si je lui demande de me tracer la soustraction des membres (et voir ainsi si le résultat vaut ou non zéro) : trace("erreur 2 :: orientation " + objet.orientation + " :: vérification : " + aFinal[1] + " == " + ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant)); trace("soustraction des membres : " + (aFinal[1] - ((aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant)));J'obtiens ceci : erreur 2 :: orientation oblique :: vérification : 350 == 350 soustraction des membres : -5.6843418860808e-14
Faut admettre qu'il y a un problème, non ? Peux-tu me confirmer que si tu remplaces tes traces par ceux cités précédemment, tu continues à obtenir 3500 ? Le but de mon calcul est d'obtenir le coefficient angulaire et le terme indépendant de la droite passant par deux points. La condition est là afin de vérifier que le calcul est correct. Comme le terme indépendant est calculé d'après le point d'origine et que la droite doit passer aussi par le second point (aFinal), je vérifie la condition en comparant les deux membres. Ca peut paraître totalement futile comme fonction, mais elle fait partie d'un ptit projet (délire). Elle a été incorporée dans une classe afin de pouvoir être réutilisée à volonté, c'est pour ça que j'aimerais résoudre ce (oui n'ayons pas peur des mots : ) BUG. Je ne dis pas "bug" à la légère car ce calcul fonctionne bien dans d'autres cas... si tu essaies avec ces valeurs, tu n'auras aucune erreur equationDroite([0, 0],[20, 350]); Etrange, non ?
--------- Darkrats --------- la loi est dure mais c'est la loi -------- Infograpix --------
|
|
jeudi 12 avril 2007 à 00:13:25 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

kingcobra
|
Réponse acceptée !
salut,
bon une bonne nouvelle surement, je pense avoir trouvé ton probleme.
Je sais que t'en a deja parlé mais c'est bien un probleme d'arrondi. La trace ne fait qu'afficher ce que flash veut bien afficher...
Et le 350 calculé est en fait 350 et des brouettes ce qui est malheureusement bien différent de 350. Tu ne peux pas faire de floor() ou de ceil() car tu ne sais pas si c'est 350 + ou - une brouette. Donc c'est round(). Voici ta nouvelle condition :
else if (objet.orientation == "oblique" && aFinal[1] != Math.round(((aFinal[0]*objet.coefficientAngulaire)+objet.termeIndependant))) {
Et ça marche ;) .
KiNgCoBrA
|
|
jeudi 12 avril 2007 à 11:57:00 |
Re : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes

Darkrats
|
Salut, Merci visiblement c'était bien ça. Pour être sûr de mon coup et éviter d'éventuels problème, je vais légèrement modifier ma condition : Code : if( objet.orientation == "oblique" && Math.round(aFinal[1] - (aFinal[0]*objet.coefficientAngulaire) + objet.termeIndependant) != 0){Fin codeSinon, c'est bizarre, il me semblait avoir testé via des floor et ça n'avait rien donné.  Enfin l'important c'est que ça marche. J'aurais préféré évité les arrondis afin de rester le plus précis possible, mais vaut mieux un arrondis qu'un bug, non ?  Je me tate en fait à mettre tout le projet dans une source... mmh à voir, est ce que ça en vaut vraiment la peine  En tout cas, encore une fois, un grand merci. --------- Darkrats --------- la loi est dure mais c'est la loi -------- Infograpix --------
|
|
Cette discussion est classée dans : problème, objet, afinal, coefficientangulaire, ainitial
Répondre à ce message
Sujets en rapport avec ce message
Problème Load XML [ par superlolo56 ]
Hello tout le monde. Mon souci, ça doit pas être très compliqué: Je loade un fichier XML, je le charge dans un tableau, mais impossible d'afficher le
problème sur du FLASH [ par jahnow ]
bonjour,je cherche une personne qui pourrait m'aider, je ne connais pas du tout la programmation flash et je developpe en html. J'ai utilisé un objet
Instancier un objet contenu dans la bibliothèque [ par ov3rdoze ]
Bonjour à tous Je débute en AS et suis face à un problème. J'ai créé un clip qui est dans ma bibliothèque. Je souhaiterais qu'à un moment précis (cli
Problème de script qui permet au joueur de dessiner son héros lui-même [ par Wanon ]
[^^confus2] J'ai poster mon code ici : [url=http://www.flashkod.com/codes/SCRIPT-PERMET-JOUEUR-CREER-SON-HEROS-INACHEVE_50457.aspx]http://www.flashko
Problème de sous menu en AS3 [ par maxence35 ]
bonjour à tous ! voilà j'ai un petit soucis, je sus en stage et je dois effectuer un site web en flash AS3. le principe est d'avoir un menu déroulant
Clone de Sprite ou de MovieClip [ par emmanuel9 ]
Bonjour à tous, J'ai un Objet sprite que je voudrais cloner mais la méthode clone() n'existe pas, semble t'il, en As3. J'ai essayé ceci : [b][i]v
Problème de LoadVars [ par xenomor_123 ]
Bonjour à tous, j'ai un petit soucis avec un LoadVars, je voudrais charger des variables définies dans un fichier .txt, et pourvoir les appellée n'imp
AS2 : problème des caractères @ et . [ par patamobscrenieux ]
j'ai beau chercher, impossible de trouver la solution via mon ami google... j'ai un problème avec 2 de mes fla; lorsqu'ils sont en local tout va bien
Problème avec duplicateMovieClip dans une boucle [ par ov3rdoze ]
Bonjour Je débute en AS et ai un problème. J'ai un fichier XML dans lequel des coordonnées sont enregistrées. J'ai un objet que je souhaite dupliqué
Problème image et lien [ par babydunet ]
Salut à tous, voila j'ai crée une page flash avec le logiciel Aleo Flash Intro Banner Maker pour l'index d'un site et j'ai inséré des petites bannière
Livres en rapport
|
Derniers Blogs
[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA[MIX10] KEYNOTE DEUXIèME JOURNéE - INTERNET EXPLORER 9, HTML5, VISUAL STUDIO 2010, ODATA par cyril
Le deuxième keynote du mix fut très riche en contenu. Internet Explorer 9 Juste un après le lancement de Internet Explorer 8, Microsoft a dévoilé les nouveautés de Internet Explorer 9. Désormais, IE supportera HTML5, SVG et CSS3. L'élément ...
Cliquez pour lire la suite de l'article par cyril CERTIFICATIONS BETA .NET 4CERTIFICATIONS BETA .NET 4 par KooKiz
Les inscriptions pour les certifications beta .NET 4 ont commencé. L'inscription est offerte pour les examens suivants : - 71-511, TS: Windows Applications Development with Microsoft .NET Framework 4 - 71-515, TS: Web Applications Development with...
Cliquez pour lire la suite de l'article par KooKiz [MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2[MIX 2010] - MICROSOFT TRANSLATOR TECHNOLOGY PREVIEW V2 par redo
J'imagine que la plupart d'entre vous connaissent bien et utilisent le service de traduction de Google, mais connaissez-vous celui de Microsoft . Microsoft Translator ? Effectivement, Microsoft nous annoncé le lancement version 2 de la Technologie Preview...
Cliquez pour lire la suite de l'article par redo LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010!LANCEMENT EN PREVIEW DE CYCLONE LORS DES TECHDAYS 2010! par MPOWARE
Toutes les vidéos de ce lancement sont en ligne!
Partie I - Intro
http://www.youtube.com/watch?v=LkQzTQ8T6CA
Partie II - Démo 1
http://www.youtube.com/watch?v=drAhYQ7lqvo
Partie III - Démo 2
http://www.youtube.com/watch?v=c8KM_1Gqybc...
Cliquez pour lire la suite de l'article par MPOWARE
Logiciels
Academy System (10.9.4.0)ACADEMY SYSTEM (10.9.4.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Xilisoft Convertisseur Vidéo Ultimate (5.1.39.0305)XILISOFT CONVERTISSEUR VIDéO ULTIMATE (5.1.39.0305)Xilisoft Convertisseur Vidéo Ultimate est un outil puissant de conversion vidéo, facile à utilise... Cliquez pour télécharger Xilisoft Convertisseur Vidéo Ultimate Xilisoft DVD Ripper Ultimate (5.0.64.0304)XILISOFT DVD RIPPER ULTIMATE (5.0.64.0304)Xilisoft DVD Ripper Ultimate est un logiciel excellent pour copier et convertir DVD vers presque ... Cliquez pour télécharger Xilisoft DVD Ripper Ultimate Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods
|