• Create Account

Vectors math programming...

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

2 replies to this topic

#1ogracian  Members

180
Like
Likes
Like

Posted 18 August 2001 - 06:01 PM

Hello I am building a simple vector math class to support basic vector operations, currently I only use a simple 3 floats to represent each vector''s component, but I have seen some implementations wich use unions, and structs for that, so I really appreciate if anyone explainme why use unions for that, and how implement a really optimized vector and matrices class? Thanks in advance!

#2johnb  Members

351
Like
Likes
Like

Posted 20 August 2001 - 12:45 AM

There''s no single way to do what you want: it depends a lot on your choice of language, target platform/processor and tools/compiler. But there are some general points which may be of use.

First I would recoomend structs over unions: you don''t need unions to implement vectors and I think you''re more likely to trip up with them.

The advantages of structures [for vectors] are:
Simpler code: e.g. only one line to add two vectors, not three.
Easier to work with and debug: because it''s easier to tell what you are dealing with. Without structs you use the same types for vectors and scalars and it can be difficult to tell them apart.
Quicker code: this depends on how they are implemented, but often you can take advantage of processor features such as a vector/SIMD unit to accelerate vector operations.

#3Dean Harding  Members

546
Like
Likes
Like

Posted 20 August 2001 - 01:19 AM

unions are quite useful in a vector implementation, especially if you''re using opengl which lets you specify your arguments as an array. As a quick example, here''s some code:

  class Vector{public: union { struct { float x, y, z; }; float v[3]; } // blah, blah, blah....};

This way, you can access the members of the vector with either:

  Vector v = {0,0,1}; v.x = ...; v.v[0] = ...; glVertex3fv( v.v ); glVertex3f( v.x, v.y, v.z ); ...

It''s really just a convenience thing though. There''s no real need for it. Also, you can define an operator like this:

  float *Vector::operator float *(){ return v;}
;

That way, you can do stuff like this:

  Vector v = {0,0,1}; glVertex3fv( v );

Pretty nifty, eh?

War Worlds - A 3D Real-Time Strategy game in development.

Old topic!

Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.