Mathf.Approximately : Dans quels mesures se fait l'approximation de la méthode?

Questions à propos du scripting. Hors Shader, GUI, Audio et Mobile.
megablast2
Messages : 152
Inscription : 15 Août 2013 16:47

Mathf.Approximately : Dans quels mesures se fait l'approximation de la méthode?

Message par megablast2 » 23 Jan 2022 10:58

Bonjour,
Je dois vérifier si des valeurs sont prochent de zero, mais je ne sais pas comment faire. Je dois savoir si deux éléments sont a même hauteurs.

Code : Tout sélectionner

var _height =this.FloorPos.y -_neighbor.FloorPos.y;
Mais comme je ne suis pas certain qu'elles seront exactement à la même hauteur, j'aimerais que la comparaison soit approximative. Donc au finale, savoir si _height vaut "a peut pres égale" à zero.

Du coup en cherchant j'ai trouvé ceci qui pourrait aller :
/Mathf.Approximately
Mais je ne sais pas dans quel mesure se fait l'approximation, du coup j'hesite.

Dans le doute, j'ai fait ceci :

Code : Tout sélectionner

public static bool ApproximatelyEqual(float _value1, float _value2, float _gap = 0.05f)
        {
            float diff = Mathf.Abs(_value1 - _value2);
            return diff <= _gap;
        }
Vous auriez un avis la dessus?

Bonne journée,

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: Mathf.Approximately : Dans quels mesures se fait l'approximation de la méthode?

Message par jmhoubre » 23 Jan 2022 11:47

La doc a écrit : Approximately() compares two floats and returns true if they are within a small value (Epsilon) of each other.
...
Mathf.Epsilon : A tiny floating point value (Read Only). The smallest value that a float can have different from zero.
En général, on se débrouille pour éviter de comparer des flottants. C'est ce que tu fais en faisant la différence entre tes nombres. Je trouve que ta valeur gap est un peu élevée.

Avatar de l’utilisateur
jmhoubre
Messages : 851
Inscription : 05 Oct 2019 22:05

Re: Mathf.Approximately : Dans quels mesures se fait l'approximation de la méthode?

Message par jmhoubre » 23 Jan 2022 11:50

Pour info, la ligne suivante affiche sur ma machine : Epsilon : 1,401298E-45

Code : Tout sélectionner

Debug.Log ($"Epsilon : {Mathf.Epsilon}");
Tu peux prendre gap de l'ordre de 1E-6. Après cela dépend du contexte. Par exemple, avec un Vector3 de position, si on respecte l'échelle d'Unity (1 unité Unity = 1 mètre), 1E-6 représente des millièmes de millimètres, autant dire que c'est imperceptible sur un écran tant qu'on a pas un écran 65636K.

megablast2
Messages : 152
Inscription : 15 Août 2013 16:47

Re: Mathf.Approximately : Dans quels mesures se fait l'approximation de la méthode?

Message par megablast2 » 23 Jan 2022 15:32

Merci pour ton retour. Je ne pensais pas que ça pouvait être aussi précis. Après je ne pense pas en effet que ça est besoin d'être aussi précis pour le mon cas du moins.

Répondre

Revenir vers « Scripting »