Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : Problème de math (égalité refusée), Deux valeurs égales sont considérées comme différentes [ Scripts / ActionScript ] (Darkrats)

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 == 350

Or, 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 code

Sinon, 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é 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 Problème d'affichage sous Mozilla [ par sebarbraz ] Salut a tous,J'ai un problème d'affichage de mon anim flash : j'ai mis ses dimensions en pourcentage (100%) et ca marche nickel sous Internet Explorer problème de loadSound en continu (rafraichir pour lancer la musique) [ par lacramour ] Bonjour tout le monde,J'ai un souci pour loader une musique mp3 en continu (actionscript 2).En test dans flash et en local, ça marche;Par contre, en l probleme de preloader [ par lugo ] Bonjour, Voilà, j'expose mon problème. J'ai un clip principal avec  préloader qui fonctionne très bien et dont le script est le suivant: var Total = _ Flash et HTML [ par boninou ] Salut à tous !Voilà j'ai un petit problème. Je suis débutant en flash et j'ai fait une petite animation pour mon site web mais le problème c'est que j Problème fichier son avec uniquement une voix [ par steuf24 ] Hello tout le monde,Grosse énigme à mes yeux... Peut-être allez vous m'aider !J'utilise une fonction qui permet de lire 5 fichiers son aléatoirement l Problème bizarre de typo avec caractères accentués [ par sofie16 ] Bonjour,j'utilise une police spéciale pour des textes que je charge dynamiquement dans des champs textes à partir de fichier .txt. Les fichiers txt so Problème de preload [ par maxime62 ] Hello à tous... Je travaille sous Flash MX 2004... J'ai un gros problème avec mes preload... J'ai fait les miens, j'ai copié sur des tutos mais à chaq Problème Affichage image depuis bdd [ par soulvision ] Bonjour, j'ai créé une newsbox sous flash, c'est une zone de texte dynamique qui récupère des données php dans ma base.. J'aimerai qu'apparaissent des


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



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
Temps d'éxécution de la page : 0,281 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.