Giter Club home page Giter Club logo

geomath's Introduction

geomath

build crates documentation license

Simulation, Graphics, Geometry

Brief

A framework that aims to provide a complete 2D-3D-4D maths toolbox for the Rust language.

It's general purpose and exposes a vast and simple API while showing high performance thanks to many optimization that are allowed only in a 2D-3D-4D context.

Features

  • Stack allocated matrices and vectors with common algebra and transforms
  • All common 2D, 3D and 4D transforms (rigid body, rotations, ...)
  • Coordinates manipulation (polar, cylindrical, spherical, ...)
  • Point's kinematics and trajectory representation
  • Documentation and examples

Usage

The documentation contains a short introductions for each module to easily get started with the framework.

However if you need examples take a look at :

Why another maths framework

Instead of providing tools only for linear algebra or computer graphics, this framework is made to cover all theses usages at the same time.

It's really made to make maths easier when coding, the goal is to reach the feeling of Matlab and to provide a general purpose 2D, 3D and 4D maths toolbox.

Furthermore, the implementation is the result of the previous optimizations found during the two other math framework that I published on npm meca3 and space3.

It runs very fast and provide an API that shows clearly where computation is expensive so you can adopt the best patterns to reach the desired performance.

Contribution

The framework still largely incomplete, more features are scheduled to be implemented, some optimizations can still be perform and more unit testing is required.

Any suggestion or issues are welcomed, be free to contribute the geomath project and improve the Rust math experience.

geomath's People

Contributors

samibendou avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar

geomath's Issues

Matrix3::inverse is wrong, mixed up with adjugate?

let m = Matrix3::from_translation(&vector::vec2(1.0, 2.0));
println!("{:?}\n {:?}\n {:?}", m, m * m.inverse(), m * m.adjugate());

gives

( 1.000  0.000  1.000 )
( 0.000  1.000  2.000 )
( 0.000  0.000  1.000 )
 
( 0.000  -2.000  2.000 )
( -2.000  -3.000  4.000 )
( -1.000  -2.000  1.000 )
 
( 1.000  0.000  0.000 )
( 0.000  1.000  0.000 )
( 0.000  0.000  1.000 )

The fact that m * m.inverse() =/= identity, but m * m.adjugate() == identity is very strange to me, although I'm no expert on linear algebra. Shouldn't it be the other way around? But how could such a fundamental error make it to production? I'm confused.

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.