Skip to content

Euclid is a .NET library for calculating position and rotation in three-dimensional Euclidean spaces with single precision. It depends on .NET Standard 2.0.

Notifications You must be signed in to change notification settings

maroontress/Euclid

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Euclid

Euclid is a .NET library for calculating position and rotation in three-dimensional Euclidean spaces with single precision. It depends on .NET Standard 2.0.

Examples

Position and XYZ tuple

You can use the Position class and its extension methods to manipulate coordinates in three-dimensional space. Instances of the Position class are immutable objects, so the operations that return a Position object create a new instance as follows:

// 'p' represents (x, y, z) = (1, 2, 3).
var p = new Position(1, 2, 3);
// 'q' represents (x, y, z) = (4, 5, 6).
var q = new Position(4, 5, 6);
var r = p.Add(q);

// p == (1, 2, 3)
// q == (4, 5, 6)
// r == (5, 7, 9)

You can also use XYZ tuples with extension methods. Note that an XYZ tuple (structure) is not immutable. The extension methods do not change its value but return a new instance, as do the methods of the Position class as follows:

// 'p' represents (x, y, z) = (1, 2, 3).
var p = (1.0f, 2.0f, 3.0f);
// 'q' represents (x, y, z) = (4, 5, 6).
var q = (4.0f, 5.0f, 6.0f);
var r = p.Add(q);

// p == (1, 2, 3)
// q == (4, 5, 6)
// r == (5, 7, 9)

Rotation

The Matrix33 class can be used as a rotation matrix to handle rotation in three-dimensional space. Note that the Matrix33 class itself can represent 3 × 3 square matrices.

You can create an instance with three column vectors as follows:

var x = new Position(1, 1, 1).Normalize();
var y = new Position(-1, 0, 1).Normalize();
var z = x.CrossProduct(y);

// R = (X Y Z)
var r = new Matrix33(x, y, z);

Each column vector is a projection of a unit vector along the X, Y, and Z axes.

You can project positions with the rotation matrix as follows:

var m = new Matrix33(x, y, z);
var p = new Position(1, 1, 1);
var q = m.Map(p);

Instances of the Matrix33 class are immutable objects, so the operations that return objects of the Matrix33 class create new instances as follows:

var t = new Matrix33(x1, y1, z1);
var u = new Matrix33(x2, y2, z2);

// V = TU
var v = t.Mul(u);

Posture

Each instance of Posture class contains a pair of a position and a rotation matrix, which represents translation and rotation relative to the origin.

You can create a Posture instance with Position and Matrix33 objects as follows:

var p = new Position(...);
var r = new Matrix33(...);
var pose = new Posture(p, r);

The Posture object allows you to transform positions from a parent coordinate system to the child coordinate system, or vice versa.

Coordinate system

The instance of CoordinateSystem class represents a singly-linked list where each node contains a Posture object. The link of each coordinate system stands for its parent.

The World object is the head node of the list. Its parent is itself.

var sunPosture = new Posture(...);
var earthPosture = new Posture(...);
var moonPosture = new Posture(...);

var world = CoordinateSystem.World;
var sun = world.NewChild(sunPosture);
var earth = sun.NewChild(earthPosture);
var moon = earth.NewChild(moonPosture);

The CoordinateSystem object allows you to transform positions from the world coordinate system to the local coordinate system, or vice versa.

API Reference

How to build

Requirements to build

How to get started

git clone URL
cd Euclid
dotnet restore
dotnet build

How to get test coverage report with Coverlet

dotnet test -p:CollectCoverage=true -p:CoverletOutputFormat=opencover \
        --no-build Euclid.Test
dotnet ANYWHERE/reportgenerator.dll \
        -reports:Euclid.Test/coverage.opencover.xml \
        -targetdir:Coverlet-html

About

Euclid is a .NET library for calculating position and rotation in three-dimensional Euclidean spaces with single precision. It depends on .NET Standard 2.0.

Resources

Stars

Watchers

Forks

Languages