- 所有点都是向量,所有向量都是点。
- 所有方向都是向量,并非所有向量都是方向(这不应该意味着不允许双向转换)。
我希望最好将运算符全部覆盖一次,因为它们都是完全相同的。在 C++ 中,我可以定义 class Vector { float x,y,z; },并执行 typedef Point = Vector, typedef Direction = Vector;在 C# 中没有等效的(“using Point=Vector;”很糟糕,因为你必须将它放在你使用的每个文档中,并且它不是由编译器强制执行的)。
我尝试定义 3 个不同的类并重写每个类的运算符,然后进行隐式类型转换,这会使代码运行速度变慢,等等。
我尝试只定义 Vector,然后定义 Point:Vector 和 Direction:Vector,这样我只编写一次运算符,但无法进行隐式类型转换 Point Vector 或 Direction Vector。
我可以简单地定义 Vector 类并在任何地方使用它,但这会产生歧义,因为变量应该是空间中的位置(点)、空间中的相对位置(向量)或单位向量(方向)。例如函数:
Vector GetOrthogon(Vector a, Vector b) {
// ....
}
您无法知道它是否需要任何向量或单位向量。在 C++ 中你可以做到这一点,那么为什么在 C# 中不行呢?
Note:如果可能的话,使用结构而不是类将是理想的。
从数学上来说,点就是向量。空间中不存在绝对的点。点被定义为来自任意原点的向量。因此,我使用向量来表示点和点之间的差异。
因为方向是单位向量,所以也不需要区分。这就像尝试为整数 1 和其他整数定义不同的静态类型。所以我使用向量来表示两个方向和点之间的差异。
因此,定义一个 Vector 类型。它将使您的生活变得更轻松,因为您将需要编写和测试更少的类和重载的运算符/函数,并且在数学上将变得“更纯粹”(如果这对您很重要)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)