I want to implement a Vector3 class just for practice. But I am in a dilemma:

I keep wondering if I should implement some methods as static and/or as instance methods, like:

1. Vector3.Normalize(v1);

or

2. v1.Normalize();

Here you might not want to change the original vector, so #1 makes sense. And maybe you want to use it on unitialized variables so, you must use #1. But maybe I want to change the original one, so #2 is more elegant than:

v1 = Vector3.Normalize(v1);

But what about this example:

3. Vector3.GetBoundingDiagonalLength(points);

or

4. points.GetBoundingDiagonalLength();

Since this returns a float, the purpose changes slightly so, #4 doesn't change the original vector like #3 doesn't.

Even in Microsoft's Vector3 implementation for XNA they make provide an extra method for out support. So I am also wondering if that's common to use IE, would you use:

v1...

v2...

Vector3.Distance(v1, v2, out d)

Lastly what about Vector3.Add, Subtract that XNA has in there Isn't it more readable, desirable and elegant using operators directly on them

Thanks alot again,

Aw