Fast 2d geometry math: Vector2, Rectangle, Circle, Matrix2x3 (2D transformation), Circle, BoundingBox, Line2, Segment2, Intersections, Distances, Transitions (animation/tween), Noise, Random numbers.
So the objective is "Be fast"
Help needed / TODO LIST
- API completeness
- Use falafel/esprima to create an asm.js build
- More Numerical integrators
- AI: Path-finding, Steer, Backtracking
- IK: FABRIK
- Minkowski distance, euclidean, Manhattan
- Beizer math
- Serialization / De-serialization
- did I miss anything useful?
Performance is based on good practices.
- Avoid new
- Use arrays instead of objects, this is huge performance boost!
- Avoid creating unnecessary variables (reuse intermediate variables) only
clonemethods should create new variables.
- Cache every function call to a single variable. example:
- If access a multi-dimensional array in a loop, cache the array access.
for(i...) carr=arr[i]; carr[X]
- Do not use
everyetc. or other looping method that require
callusage, both are costly.
See some performance test that prove it.
Obviously I ignore myself in some parts of this library. Feel free to issue me :)
npm install -g gruntnpm install -g grunt-cli
Create distribution packages using browserify and documentation.
- argumentify Assert on invalid arguments to properly debug your app.
- funlinify inline function
Watch every change and rebuild the distribution code.
What can you do with js-2dmath?
See some examples.
- Vec2 collisions
The documentation is autogenerated with falafel see dist.js for more fun! :)
How do i know a variable type?
You can't, there is no instanceof or anything like that, everything are numbers/arrays.
I choose to keep track of all types using meaningful naming or enclose the variable in an object like
var movable =body: Polygon // could be a circle, change the type...type: "polygon"