在XNA Vector3的幫助中,列出的兩個公共方法是Subtract和op_Subtraction。他們之間有什麼區別,什麼時候應該使用一個而不是另一個?XNA矢量的減法和op_Subtraction有什麼區別?
0
A
回答
2
op_Subtraction
(在-
運營商實現)和Vector3.Subtract
基本上是相同的事情。他們創建一個新的矢量與減法操作的值。 Vector3
是一種值類型,所以沒有內存管理成本,但是建設成本很低。
減的其他過載是稍有不同:
void Vector3.Subtract(ref Vector3 value1, ref Vector3 value2, out Vector3 result)
這一個花費其輸入和輸出的引用。對於面向數據的編程來說更好(例如:一個緊湊的循環,比如說一個物理引擎,它將一個數組中的數據輸出到另一個數組中)。這消除了建設成本以及將6個浮點數作爲參數傳遞的成本,但函數調用和解引用的成本仍然很低。
您可以通過直接做減法得到更快:
result.X = value1.X - value2.X;
result.Y = value1.Y - value2.Y;
result.Z = value1.Z - value2.Z;
當然,當你選擇更快的選擇,你也失去可讀性!這是更清楚:
result = value1 - value2;
因此,要回答你的問題 - 做減法載體時,你應該是絕對使用矢量-
操作,除非你寫某種非常高性能的面向數據的事情和你已經對你的代碼進行了描述,發現它是一個值得改進的性能。
如果您有興趣瞭解更多的低級別性能信息,請查看Shawn Hargreaves的Understanding XNA Framework Performance。 (實際上,它包括一個比較我在此處列出的三種方法的基準,當在粒子系統中使用時)。
1
op_Subtraction()
對於-
運營商實現,但否則他們是相同的:
vectorA - vectorB
Vector3.Subtract(vectorA, vectorB)
相關問題
- 1. 二維矢量和矢量地圖有什麼區別?
- 2. 張量流中tf.sub和正減運算有什麼區別?
- 3. 變量的=和=>有什麼區別?
- 4. 算法和方法有什麼區別
- 5. TARGET_ARCH和TARGET_MACH變量有什麼區別?
- 6. definePlugin和env變量有什麼區別?
- 7. 對象和變量有什麼區別?
- 8. 各種助推ublas稀疏矢量之間有什麼區別?
- 9. XNA 2D矢量角度 - 什麼是正確的計算方法?
- 10. 有什麼區別`和$(Bash中有什麼區別?
- 11. 'remove'和'removeChild'方法有什麼區別?
- 12. Html.Partial和Html.Action方法有什麼區別?
- 13. browser.sleep()和browser.wait()方法有什麼區別?
- 14. 方法`toHaveBeenCalled()`和`andCalledThrough()`有什麼區別?
- 15. 'configure'和'configureGlobal'方法有什麼區別?
- 16. bcrypt()和crypt()方法有什麼區別?
- 17. GET和POST方法有什麼區別?
- 18. UrlHelper.Route和UrlHelper.Link方法有什麼區別?
- 19. nibNameOrNil和ViewDidLoad方法有什麼區別?
- 20. 方法和協議有什麼區別
- 21. XNA,矢量數學和GPU
- 22. spark mllib和spark ml的矢量實現之間有什麼區別?
- 23. Viterbi CYK和Probabilistic CYK算法有什麼區別,有什麼區別嗎?
- 24. 有什麼區別? :和||
- 25. &&和||有什麼區別?
- 26. 「/」和「/ *」有什麼區別?
- 27. 有什麼區別:。!和:r!?
- 28. ==和===有什麼區別?
- 29. Appender和〜有什麼區別?
- 30. $ @和$ *有什麼區別?
我對性能非常感興趣,所以我非常感謝知道如何更快地進行減法, 。 – Curyous 2011-02-06 17:31:19