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