Ara3D.Mathematics
1.4.1
See the version list below for details.
dotnet add package Ara3D.Mathematics --version 1.4.1
NuGet\Install-Package Ara3D.Mathematics -Version 1.4.1
<PackageReference Include="Ara3D.Mathematics" Version="1.4.1" />
paket add Ara3D.Mathematics --version 1.4.1
#r "nuget: Ara3D.Mathematics, 1.4.1"
// Install Ara3D.Mathematics as a Cake Addin #addin nuget:?package=Ara3D.Mathematics&version=1.4.1 // Install Ara3D.Mathematics as a Cake Tool #tool nuget:?package=Ara3D.Mathematics&version=1.4.1
This repository is a fork of Vim.Math3D which was originally written by Ara 3D Inc.
Ara3D.Mathematics
Ara3D.Mathematics is a portable, safe, and efficient 3D math library written in C# targeting .NET Standard 2.0 without any dependencies.
It is intended primarily as a feature rich drop-in replacement for System.Numerics that assures consistent serialization across platforms, enforces immutability, and offers many additional structures and functionality.
Ara3D.Mathematics is compatible with Unity and has been used in production on many different platforms including Windows, Android, iOS, WebGL, and Magic Leap.
History and the Math3D Origins
The first version of this library (Ara3D.Math3D was written by Christopher Diggins for Ara 3D.
The original library was based on the CoreFX implementation of System.Numerics with additional algorithms and structures taken from MonoGame, an open-source cross platform port of the XNA game development framework.
Development and maintenace was taken over by VIM a software company specializing in BIM data analysis and visualization when Christopher Diggins joined them in 2019.
VIM continues to support and publish Math3D repository at Vim.Math3D which they use in commercial products and open-source libraries.
Today Christopher is back working at Ara 3D Inc full-time and using this library as a corner-stone for a 3D modeling tool we are building.
Motivation for Forking
There are a few things that we need to do differently:
- Extend the number of data-structure and algorithms provided
- Support auto-generation of code in other languages (especially JavaScript)
- Move geometrical structures and algorithms into a geometry specific library
- Default to using double precision floating point numbers throughout
- Improve the efficiency of the compiled libraries
How we will Achieve the Goals
To achieve better performance and cross-language code-generation, the core algorithms are being ported to another language called Plato.
Plato is designed to make it easy to express generic mathematical concepts and algorithms in a manner that is easy to analyze, optimize, and port to different languages and platforms.
What Next?
For now, the Ara3D.Mathematics surface API is very similar to Vim.Math3D with only a few minor differences. The Plato library is quite different and is undergoing testing and development.
Currently our priority is finalizing the design of the Ara3D.Geometry library.
Once the geometry library design is stabilizied, the names of the Ara3D.Mathematics structures will be mapped to the new Plato names. Afterwards, the new implementations will be used, and Plato will be introduced as part of the build process.
Once this is complete the library will be separated into its own repository.
During this process it may be possible that we have to create a dependency on Ara3D.Collections and follow a similar process. This is because the most basic collections like arrays and enumerable, may be replaced by Plato primitives.
Design Goals
The Ara3D.Mathematics design goals remain mostly the same as the Math3D library:
- Portability
- The library must be pure C#
- No unsafe code
- Fixed binary layout of structs in memory
- Double and Single precision implementation of most structures
- Robustness
- Functions are well covered by unit tests
- Functions are easy to read, understand, and verify
- Ease of Use and Discoverability
- Consistent with Microsoft coding styles
- Consistent API with System.Numerics
- Can use fluent syntax (object-oriented "dot" notation)
- We don't have to pass arguments by reference
- Performance
- Excellent performance, but not at cost of readability and discoverability
Related Libraries
- Vim.Math3D
- System.Numerics
- SharpDX Mathematics
- MonoGame
- Math.NET Spatial
- Math.NET Numerics
- Unity.Mathematics
- Unity Reference
- Abacus
- Geometry3Sharp
- FNA-XNA
- Stride
- A Vector Type for C# - R Potter via Code Project
- Godot Engine C# Libraries
- GeometRi - Simple and lightweight computational geometry library for .Net
- Veldrid
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. |
.NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
.NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
.NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
MonoAndroid | monoandroid was computed. |
MonoMac | monomac was computed. |
MonoTouch | monotouch was computed. |
Tizen | tizen40 was computed. tizen60 was computed. |
Xamarin.iOS | xamarinios was computed. |
Xamarin.Mac | xamarinmac was computed. |
Xamarin.TVOS | xamarintvos was computed. |
Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- No dependencies.
NuGet packages (2)
Showing the top 2 NuGet packages that depend on Ara3D.Mathematics:
Package | Downloads |
---|---|
Ara3D.Serialization.G3D
A simple, efficient, generic binary format for storing and transmitting geometry. |
|
Ara3D.Geometry
A C# library of geometric data structures and algorithms |
GitHub repositories
This package is not used by any popular GitHub repositories.