J'ai une classe de vecteurs en C# (un fragment ci-dessous). Mon problème est que quand j'appelle GetMagnitude(), il renvoie toujours 0.0f - même avec le débogueur en cours d'exécution et je vérifie que Sq a une valeur valide, dès qu'il est passé dans une autre fonction (par exemple: Normalize()), il a retourné 0.0f. Quelqu'un peut-il expliquer cela et m'aider à le résoudre? Je suppose que cela a quelque chose à voir avec la conversion double-> float mais je ne peux pas le comprendre.Pourquoi la valeur de retour est-elle incorrecte?
public class float3
{
public float x;
public float y;
public float z;
public float GetMagnitude()
{
float SumSquares = (float)(Math.Pow(x, 2) + Math.Pow(y, 2) + Math.Pow(z, 2));
float Sq = (float)Math.Sqrt(SumSquares);
return Sq;
}
public void Normalize()
{
float inverse = 1.0f/GetMagnitude();
x *= inverse;
y *= inverse;
z *= inverse;
}
}
Avez-vous déjà initialisé x, y et z? Dans votre exemple, il serait évidemment retourner 0. – Leif
vous pourriez envisager d'écrire x * x + y * y + z * z plutôt que d'utiliser Math.Pow ... il est à la fois plus court et plus rapide ... – Spudd86