Question

Depuis que je devais travailler avec PI (3.1415 ...) en C # Je l'ai utilisé Math.PI. pour obtenir la valeur. En général, je voudrais simplement utiliser des valeurs telles que Math.PI/2.0 ou 2.0*Math.PI, mais maintenant, je viens de remarquer que XNA fournit une classe MathHelper. La bonne chose à ce sujet est que je peux appeler MathHelper.PiOver2 et MathHelper.TwoPi, rendant ainsi une étape extrêmement trivial encore plus trivial. ; -)

Je supposais ces deux classes étaient interchangable, mais je remarque que Math.PI/2.0 != MathHelper.PiOver2. J'ai essayé de recherche pourquoi ce serait, mais je ne trouve rien. Donc, je pensais que je voudrais essayer ma chance ici. En ce qui concerne l'utilisation PI, il des différences entre la classe Math et la classe MathHelper? Est-on préféré sur l'autre? Ou devrais-je laisser tout seul assez bien et assurez-vous juste d'utiliser systématiquement un ou l'autre tout au long de mon programme?

Était-ce utile?

La solution

Comment ne pas sont-ils égaux? Si elles sont suffisamment proches, cela pourrait bien être le problème traditionnel que l'égalité des tests avec des flottants est presque impossible.

, sont également elles du même type? Mon opinion est la plupart des calculs de jeu ont été réalisées avec des flotteurs, alors que Math.PI. serait double.

EDIT: MathHelper utilise en effet flotteurs

Autres conseils

Rechercher à chiffres:

3,1415926535897900000000000000000 // Math.PI.

3,1415930000000000000000000000000 // MathHelper.PI

3,1415926535897932384626433832795 // PI à partir de Windows Calc


1,5707963267949000000000000000000 // Math.PI. / 2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi / 2

1,5707963267948966192313216916398 // PI / 2 à partir de Windows Calc


Explication du problème: La perte de précision

Best PI / 2 = Math.PI. / 2

Best PI / 2 n'est pas Math.PI. / 2!

Dans le développement du jeu ne pas utiliser la constante Math.PI., la perte de précision est négligeable, vous ne verrez pas la différence dans le mouvement de vos objets de jeu ... La performance est plus importante. Utilisation de la MathHelper.PiOver2 vous permettra d'économiser une double division et un double à la conversion flotter. Cela pourrait semble être très peu d'aide, mais il y a des problèmes (systèmes de calcul intensif de particules) où la différence est significative.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top