Ara3D.Mathematics 1.4.3

There is a newer version of this package available.
See the version list below for details.
dotnet add package Ara3D.Mathematics --version 1.4.3                
NuGet\Install-Package Ara3D.Mathematics -Version 1.4.3                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Ara3D.Mathematics" Version="1.4.3" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Ara3D.Mathematics --version 1.4.3                
#r "nuget: Ara3D.Mathematics, 1.4.3"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Ara3D.Mathematics as a Cake Addin
#addin nuget:?package=Ara3D.Mathematics&version=1.4.3

// Install Ara3D.Mathematics as a Cake Tool
#tool nuget:?package=Ara3D.Mathematics&version=1.4.3                

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:

  1. Extend the number of data-structure and algorithms provided
  2. Support auto-generation of code in other languages (especially JavaScript)
  3. Move geometrical structures and algorithms into a geometry specific library
  4. Default to using double precision floating point numbers throughout
  5. 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:

  1. 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
  2. Robustness
    • Functions are well covered by unit tests
    • Functions are easy to read, understand, and verify
  3. 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
  4. Performance
    • Excellent performance, but not at cost of readability and discoverability
Product 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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • .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.

Version Downloads Last updated
1.4.5 190 10/9/2024
1.4.4 296 8/25/2024
1.4.3 307 3/19/2024
1.4.1 320 3/12/2024
1.3.2 172 3/5/2024