# Boost :

From: Noah Stein (noah_at_[hidden])
Date: 2004-11-07 15:24:59

> -----Original Message-----
> From: boost-bounces_at_[hidden] [mailto:boost-bounces_at_[hidden]]
> On Behalf Of Michael Walter
> Sent: Sunday, November 07, 2004 2:52 AM
> To: boost_at_[hidden]
> Subject: Re: Re[6]: [boost] Re: Re: GUI Library Proposal for a Proposal

> > MW> a vector space:
> > MW> difference :: E^n x E^n -> R^n
> > I just do not get this. Why would you have a difference between two
> > points in E^n defined as a point in R^n?
> Please read what I wrote: ".. to a vector in a vector space.". R^n is
> a *vector* space, hence the difference between two points in E^n is a
> *vector* in R^n.

The simplest way to say it is that point subtraction is not closed. It's no
stranger than the fact that square root is not closed for reals.

> Now, you can state the identification between points and vectors: E^n =
> R^n
> Again, in C++:
> typedef vector<n> point<n>;

If you are merely going to create a typedef, there's absolutely no reason to
differentiate the two. Through the magic of typdef'ing, they would be
semantically identical. Using your notation, E^n != R^n. They're both
represented by n-tuples, but beyond that they are different. They have
different operations. R^n has addition and subtraction, E^n has no addition
operation and its subtraction isn't closed in E^n. R^n has inner and outer
products, E^n does not.

The above statement is true for affine and projective spaces. In a
Grassmann space, points may be added together; however, points still do not
have inner and outer products. In geometric algebra all the operations are
defined and closed on all types. Somebody here wrote a GA library a year or
two ago IIRC.

-- Noah