public virtual uint Hash()
{
int nums = NumberOfComponents;
double[] floats = new double[nums];
uint h = 0;
uint i;
GetComponents(ref floats);
for (i = 0; i < floats.Length; i++)
{
h = (h << 5) + h + (uint)floats[i];
}
return h;
}