Add & speed up PVector operations, clean up namespace #44
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Another pull request!
This does a few nice semantic things for PVector:
__rmul__
method for PVector, so that you can say5 * PVector(2, 3, 4)
without receiving a TypeError.__div__
method for PVector so that they can be divided by scalars (as a shorthand for(1/a) * v
).It also does a few performance things:
__iadd__
for+=
and so on) for PVector so that they update the vector in-place instead of allocating new copies.Normally, I wouldn't worry about microoptimizing like this, but vectors are the sort of things that could be modified in hot loops, and it's a simple change. According to a completely unscientific benchmark I rigged up (lots of vector operations with
timeit()
), using Java code for*
makes it twice as fast, and destructively updating a variable with*=
is four times as fast.Finally, this cleans up the functions after they're patched onto PVector, since they were still hanging out in the global namespace.