Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ember.js/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么WPF定义它';s自己的类型来表示二维空间中的点,而不是使用System.Numerics.Vector2_C#_Wpf_Uwp_Simd - Fatal编程技术网

C# 为什么WPF定义它';s自己的类型来表示二维空间中的点,而不是使用System.Numerics.Vector2

C# 为什么WPF定义它';s自己的类型来表示二维空间中的点,而不是使用System.Numerics.Vector2,c#,wpf,uwp,simd,C#,Wpf,Uwp,Simd,我最近了解到,C#有像andVector3这样的类型,如果可能的话,它们被设计为使用SIMD指令 因此,类型Vector2非常适合在二维空间(如屏幕)中表示点。但是,为什么WPF和UWP不使用这种类型表示二维点和点。仅仅因为两个类恰好具有相同的属性,并不自动意味着它们应该合并到一个共享类中 例如,lat/lon对和(2D)点都可以由两个十进制值表示;但它们在概念上是不同的。点位于二维平面上,而lat/lon对位于球体表面(这是二维表面,但弯曲,不是平面)。 因为这是两个具有不同上下文的不同概念,

我最近了解到,C#有像and
Vector3
这样的类型,如果可能的话,它们被设计为使用SIMD指令


因此,类型
Vector2
非常适合在二维空间(如屏幕)中表示点。但是,为什么WPF和UWP不使用这种类型表示二维点和点。

仅仅因为两个类恰好具有相同的属性,并不自动意味着它们应该合并到一个共享类中

例如,lat/lon对和(2D)点都可以由两个十进制值表示;但它们在概念上是不同的。点位于二维平面上,而lat/lon对位于球体表面(这是二维表面,但弯曲,不是平面)。
因为这是两个具有不同上下文的不同概念,所以我们将这两个概念分开,因为将它们视为同一类型的数据没有任何好处

从概念上讲,向量与点非常不同。然而,实际上,向量的数据可以由单个点表示,因为(按照惯例)另一个点被假定为(0,0)或(0,0,0)

从技术上讲,向量应该由两点表示,因为向量表示这些点之间的差。从(2,2)到(3,3)的向量与从(100,4)到(101,5)的向量相同,也与从(0,0)到(1,1)的向量相同。所有三个向量表示两点之间的(+1,+1)差

但是,由于我们只对两点之间的差异感兴趣,而实际上并不关心两点本身,因此我们可以通过使用第一点始终是原点(0,0)的约定来减少需要存储的数据量,这允许我们保留所有必要的信息(原点和第二个点之间的差异)但要求我们存储较少的变量数据。这是一个净正值,因此没有理由不这样做


这是一个可读性优于简洁性的论点。将两个概念实体分开并没有太大的成本,但这样做会大大提高可读性。
如果将它们合并,将不会获得任何实际好处,但会破坏这两个不相关实体之间的分离,从而显著降低可读性


你的建议来源于(绝对人性化的)过度应用范例的倾向,在这种情况下是干巴巴的。而重新评估事物,看看你是否可以优化(或不复制)是有价值的你也可以过火去寻找那些不存在的模式。合并向量和点的建议太过火了,但是你的建议来源于尝试应用良好的实践。

仅仅因为两个类恰好具有相同的属性,并不意味着它们应该合并成一个s单个共享类

例如,lat/lon对和(2D)点都可以用两个十进制值表示;但它们在概念上是不同的。点位于2D平面上,而lat/lon对位于球体表面上(这是2D曲面,但弯曲,不是平面)。
因为这是两个具有不同上下文的不同概念,所以我们将这两个概念分开,因为将它们视为同一类型的数据没有任何好处

从概念上讲,向量与点非常不同。然而,实际上,向量的数据可以由单个点表示,因为(按照惯例)另一个点被假定为(0,0)或(0,0,0)

从技术上讲,一个向量应该由两个点表示,因为向量表示这些点之间的差。从(2,2)到(3,3)的向量与从(100,4)到(101,5)的向量相同,也与从(0,0)到(1,1)的向量相同。这三个向量都表示两点之间的差(+1,+1)

但是,由于我们只对两点之间的差异感兴趣,而实际上并不关心两点本身,因此我们可以通过使用第一点始终是原点(0,0)的约定来减少需要存储的数据量,这允许我们保留所有必要的信息(原点和第二个点之间的差异)但要求我们存储较少的变量数据。这是一个净正值,因此没有理由不这样做


这是一个可读性优于简洁性的论点。将两个概念实体分开并没有太大的成本,但这样做会大大提高可读性。
如果将它们合并,将不会获得任何实际好处,但会破坏这两个不相关实体之间的分离,从而显著降低可读性


你的建议来源于(绝对人性化的)过度应用范例的倾向,在这种情况下是干巴巴的。而重新评估事物,看看你是否可以优化(或不复制)是有价值的事物;你也可以过火去寻找不存在的模式。合并向量和点的建议太过火了,但你的建议来源于尝试应用良好的实践。

我会假设,因为向量和点在语义上是不同的。向量大致表示一个方向,而点表示一个方向一点。@ckuri:你回答这个问题的评论(概念上的差异)的核心是正确的,但向量表示方向和大小(即你所说的向量长度)。标准化向量只表示方向(因为标准化向量的大小定义为1)Vector2是单精度的,可以从.NET4.6开始使用。将WPF从双精度更改为单精度并将Point更改为Vector2可能会