我发现 .NET 框架中有两个不同的矢量类实现:Microsoft.DirectX.Vector3 和 Microsoft.XNA.Framework.Vector3。
查看成员方法,它们提供几乎相同的功能,所以我很困惑.. 通常推荐哪些类?
我的程序不需要可视化 3D 对象,而只需要计算具有 3D 点的 CPU 密集型作业。
我发现 .NET 框架中有两个不同的矢量类实现:Microsoft.DirectX.Vector3 和 Microsoft.XNA.Framework.Vector3。
查看成员方法,它们提供几乎相同的功能,所以我很困惑.. 通常推荐哪些类?
我的程序不需要可视化 3D 对象,而只需要计算具有 3D 点的 CPU 密集型作业。
从.NET Framework 4.6 System.Numerics.Vectors
开始引入了支持 SIMD 的类型:
Vector2
,Vector3
和 Vector4
Vector<T>
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 在他的回答中提到的那样。