On Tue, Apr 28, 2009 at 2:52 PM, Casey Duncan <ca...@pandora.com> wrote:

> On Apr 27, 2009, at 6:16 PM, René Dudfield wrote:
>
>  Would be nice if the vectors storage of things could be anything
>> underneath.  This would be useful to allow them to use pygame.Rect or
>> numpy.array underneath.  This means they can refer to a batch of vectors,
>> but also operate only on a single vector at a time.
>>
>
> +1, though there are performance vs. generality tradeoffs to be made. On
> the general side, a vector class could assume the underlying storage
> supports __getitem__, but the performance of this would suffer, I think too
> greatly. On the performance side, it could just have a pointer to an array
> of floats that it wraps with the vector api. I used this strategy with
> Lepton and the performance is great, but it is inflexible for the storage,
> and probably not very practical for totally general use across different
> storages.
>

ah, that's an interesting point.  We could have a few special cases for
giving a buffer to use.  Then as it's written in C, there will only be one
pointer indirection.




>
>  Wondering about why only 3 element vectors?  2,3, and 4 element ones are
>> common?  Is there a way to make a combined 2,3,4 type?
>>
>
> Most operations can assume the higher dimensions are always zero, or the
> length could just be variable. But in either case the code would be slower
> than it would strictly need to be, since many operations would do more work
> than needed or would require loops where they would not be required for
> single purpose 2D, 3D or better vectors.
>
>  What number types are used?  eg, can you have a float vector, a long
>> vector, an int vector?  Any python number?  A uint8 ?
>>
>
> Seems to me like the most general number type would be a double, as it
> could comfortably support a wide range, does not generally have resolution
> issues like a 32-bit float can and performs well on modern hardware. It
> would also give consistent results compared to a python float, which is
> nice.
>
> I'm not sure what the use-case is for ints or (python) longs, the latter
> would probably gain little by being coded in C compared to pure python. Even
> in sprite-based 2D games, I find integers to be far too coarse for vector
> math, and operations like normalize become basically impossible.
>
> If you support multiple vector numeric types, than you have to confront a
> combinatorial explosion of type conversions and either duplicate, templatize
> or generalize the code in such a way that you trade either performance or
> maintainability or both.
>
> -Casey



Yeah, indeed.  Old numeric used to auto-generate most of its code for
different types.  Also there is vectypes written in python that generates
it's code for all of the different types (
http://code.google.com/p/vectypes/ ).

You want to use ints for precision I guess... and other use cases too.  eg,
using 8bit uints can mean massive memory savings (a vector can fit in one
word)... and you can also use less instructions to process a vector.

Reply via email to