
Tom Brinkman schrieb:
Just in case any one is curious, a euclidean vector is represented by its Cartesian coordinates: (*p*0, *p*1,..., *p*d - 1) (in a d-dimensional vectorial space). [Snip] However, an euclidean vector is very different from a point, or location, (from a mathematical point of view) and it would have been confusing to represent these two entities by the same *concept*.
Thanks for the feedback. Yes, at the end of the day we're talking about Cartesian products here. The naming is rather ad hoc and certainly needs to be tune. I'm particular uncomfortable with the current use of the term dimension. It is actually a quantity in terms of dimensional analysis, an what DA calls a dimension is here just an unsigned integer. So, thinking about it, using the names cartesian::coord; cartesian::point; rather then dimensions and vectors might not be a bad choice either; The name space would make clear that other representations like polar coordinates are not included. On the other hand, a point is not a very interesting object. For example, can points be added or multiplied with a scalar? Strictly speaking, that makes sense only for distances, i.e. vectors. You're right, there is a difference between points and vectors. A point, for example, has a dimension of zero, while a vector has always a dimension of one, regardless what the dimension of the vector space is. (So when talking about a three-dimensional vector, we're actually talking about a one-dimensional object in a three-dimensional space.) But this distinction is hardly ever made in mathematics, unless in introductions and maybe in very special discussions. Typically a point and it's position vector are treated synonymously, so I wonder if we really need to make the distinction here? We could cleanly separate both concepts, like: namespace cartesian { template<typename T, unsigned int D> coord; // was dim template<typename T, unsigned int D> point; // was vec // point now without vector operations }; namespace euclid { template<typename T, unsigned int D> vector { cartesian::point<T,D> point; public: // vector operations go in here }; }; maybe with implicit conversion between points and vectors. Looks charming but a bit like an overkill to me. What do you think? Best regards, Andreas