簡體   English   中英

C#Math與XNA MathHelper

[英]C# Math vs. XNA MathHelper

自從我需要在C#中使用PI(3.1415 ...)后,我使用了Math.PI來獲取值。 通常我會使用像Math.PI/2.02.0*Math.PI ,但現在我注意到XNA提供了MathHelper類。 關於這一點的MathHelper.PiOver2是我可以調用MathHelper.PiOver2MathHelper.TwoPi ,從而使一個非常微不足道的步驟變得更加微不足道。 ;-)

我假設這兩個類是可互換的,但我注意到Math.PI/2.0 != MathHelper.PiOver2 我試着研究為什么會這樣,但我一無所獲。 所以,我以為我會在這里試試運氣。 關於使用PI,Math類和MathHelper類之間是否存在差異? 一個比另一個更受歡迎嗎? 或者我應該單獨留下足夠好的東西,並確保在我的整個計划中始終如一地使用其中一個?

他們有多相同? 如果它們足夠接近,這可能只是傳統的問題,即用浮點測試相等性幾乎是不可能的。

它們是同一類型的嗎? 我的觀點是大多數游戲計算是用浮點數完成的,其中Math.PI是雙倍的。

編輯: MathHelper確實使用浮點數

看數字:

3,1415926535897900000000000000000 // Math.PI

3,1415930000000000000000000000000 // MathHelper.PI

3,1415926535897932384626433832795 //來自Windows Calc的PI


1,5707963267949000000000000000000 // Math.PI / 2

1,5707963705062900000000000000000 // MathHelper.PiOver2

1,5707960000000000000000000000000 // MathHelper.Pi / 2

1,5707963267948966192313216916398 //來自Windows Calc的PI / 2


問題解釋:准確性的損失

最佳PI / 2 = Math.PI / 2

最好的PI / 2不是Math.PI / 2!

在游戲開發中不使用Math.PI常量,精度損失可以忽略不計,你不會看到游戲對象運動的差異......性能更重要。 使用MathHelper.PiOver2將為您節省雙重除法和雙浮點轉換。 這可能似乎沒什么幫助,但存在計算密集的問題(粒子系統),其中差異很大。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM