游戏数学(8)

 

public override int GetHashCode()

{

return (int)X ^ (int)Y ^ (int)Z;

}

public static bool operator ==(Vector v1, Vector v2)

{

// If they're the same object or both null, return true.

if (System.Object.ReferenceEquals(v1, v2))

{

return true;

}

// If one is null, but not both, return false.

if (v1 == null || v2 == null)

{

return false;

}

return v1.Equals(v2);

}

public override bool Equals(object obj)

{

if (obj is Vector)

{

return Equals((Vector)obj);

}

return base.Equals(obj);

}

public static bool operator !=(Vector v1, Vector v2)

{

return !v1.Equals(v2);

}

重载= =操作符时使用了大量的代码。唯一有点新奇的函数是GetHashCode。哈希值是一个数值,尝试(但是并不保证)唯一地标识一个对象,C#的Dictionary结构中用到了哈希值。当重写相等性时,也需要重写哈希值,否则编译器很难知道哪一个才是正确的哈希值。

8.2.4  向量加法、减法和乘法

向量加法操作很简单,就是把第一个向量的各个成员与第二个向量的各个成员分别相加。下面的向量执行向量加法。

读书导航