Git Product home page Git Product logo

js-2dmath's Introduction

js-2dmath Build Status

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
  • Testing
  • 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

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 create & clone methods should create new variables.
  • Cache every function call to a single variable. example: Vec2.add => vec2_add, even Math.*
  • If access a multi-dimensional array in a loop, cache the array access. for(i...) carr=arr[i]; carr[X]
  • Do not use forEach, map, every etc. or other looping method that require apply/call usage, both are costly.

See some performance test that prove it.

funlinify It's a library that do function inline expansion for javascript. It's in early stage but it works perfectly for our usage here.

Obviously I ignore myself in some parts of this library. Feel free to issue me :)

Grunt

npm install -g grunt
npm install -g grunt-cli

grunt dist

Create distribution packages using browserify and documentation.

  • debug: debug/js-2dmath-browser-debug.js

    • argumentify Assert on invalid arguments to properly debug your app.
  • dist: dist/js-2dmath-browser.js

  • dist.min: js-2dmath-browser.min.js

grunt watch

Watch every change and rebuild the distribution code.

What can you do with js-2dmath?

See some examples.

API

The documentation is autogenerated with falafel see dist.js for more fun! :)

FAQ

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.create(/*...*/), // could be a circle, change the type...
    type: "polygon"
}

js-2dmath's People

Contributors

jfschwarz avatar llafuente avatar mscdex avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.