我發現在.NET框架中有兩個不同的矢量類實現:Microsoft.DirectX.Vector3和Microsoft.XNA.Framework.Vector3。.NET框架中的Vector3類
看着成員方法,他們提供了幾乎相同的功能,所以我很困惑......通常推薦哪些類?
我的程序不需要可視化3D對象,只需要用3D點計算CPU密集型作業。
我發現在.NET框架中有兩個不同的矢量類實現:Microsoft.DirectX.Vector3和Microsoft.XNA.Framework.Vector3。.NET框架中的Vector3類
看着成員方法,他們提供了幾乎相同的功能,所以我很困惑......通常推薦哪些類?
我的程序不需要可視化3D對象,只需要用3D點計算CPU密集型作業。
從的.NET Framework 4.6System.Numerics.Vectors
開始引入啓用SIMD類型:
Vector2
,Vector3
和Vector4
Vector<T>
Quaternion
Plane
Matrix4x4
和Matrix3x2
(在System.Numerics.Vectors.dll)
如果您使用DirectX或XNA你應該堅持他們雖然提供的類。
對於可以使用.NET 4.6或更新版本的新項目,這是要走的路。
更新06/2016本答案最初是在.NET 4.6可用之前編寫的,所以當時System.Numerics.Vectors.dll不存在。從那以後,System.Numerics.Vectors.dll提供了強烈的動機來使用BCL中定義的類型。
根據您將使用的框架,您將需要使用相應的結構。否則,它們非常相似,都是價值類型。
在兩個不同名稱空間/程序集中存在兩個相同類型對象的實現的原因是因爲如果引用另一個則會在程序集之間創建一個不需要的依賴關係。
如果您不打算使用DirectX或XNA,那麼您可以選擇其中之一。但在這種情況下,您應該使用System.Numerics.Vectors.dll中定義的新結構作爲@JBeurer在他的答案中提到的。
有道理。謝謝你的明確答案! – 2013-02-25 03:03:24
對於沒有在.net core中找到它的人,它在System.Numerics下; – Adrian 2017-03-30 14:32:24