ToolBX.Mathemancy.Interpolation 2.0.0-beta1

This is a prerelease version of ToolBX.Mathemancy.Interpolation.
There is a newer version of this package available.
See the version list below for details.
dotnet add package ToolBX.Mathemancy.Interpolation --version 2.0.0-beta1
NuGet\Install-Package ToolBX.Mathemancy.Interpolation -Version 2.0.0-beta1
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="ToolBX.Mathemancy.Interpolation" Version="2.0.0-beta1" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add ToolBX.Mathemancy.Interpolation --version 2.0.0-beta1
#r "nuget: ToolBX.Mathemancy.Interpolation, 2.0.0-beta1"
#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 ToolBX.Mathemancy.Interpolation as a Cake Addin
#addin nuget:?package=ToolBX.Mathemancy.Interpolation&version=2.0.0-beta1&prerelease

// Install ToolBX.Mathemancy.Interpolation as a Cake Tool
#tool nuget:?package=ToolBX.Mathemancy.Interpolation&version=2.0.0-beta1&prerelease

mathemancy

Mathemancy

A bundle for generic geometry types such as Vector2<T>, Size<T> and Rectangle<T>

Have you ever had the pleasure of working with a game engine that had types such as RectangleFloat or RectangleInt? I have! And I find it kind of annoying. If only there was a way to have a generic Rectangle…

There is!

Have you ever wanted Size and/or Vector types? We have that too!

This library is still small but will (probably) get bigger with time.

Most (all of it, really) of the logic for generic numeric operators was adapted to .NET 6 from Marc Gravell and Jon Skeet's https://jonskeet.uk/csharp/miscutil/

Variable names

a, b, c, m, x and y may be perfectly acceptable as variable names in mathematical theories and pieces of paper but it has no place in programming as it only serves to make code less readable.

This library recognizes that not everyone may have a strong mathematical background and makes use of longer variable names to accomodate a wider range of developers.

Mathemancy thus follows the ToolBX philosophy that programming should never be a guessing game and code should speak for itself.

Linear interpolation

As of Mathemancy 1.1.0, linear interpolation is part of Mathemancy.Interpolation.

You can also use the Mathematics class to interpolate between values. Most game engines already have these included (Lerp) but they are often misused by hobbyists because those engines seem to like to keep their code and documentation obfuscated for some reason.

public void DoSomeStuff()
{
	//Returns a value between 50 and 125 when the current progress is 40% (80)
	var currentValue = Interpolation.Calculate(50, 125, 0.4f);
}

You'll usually want to use linear interpolation in a repeating method such as a game loop for instance.

private float _progress;
private float _speed;
private float _elapsedTime;

private float _position;

//In this example, an object's _position would gradually move from 50 towards 125
public void Update(float deltaTime)
{
	if (_progress < 1)
	{
		_elapsedTime += deltaTime;
		_progress = _elapsedTime * deltaTime * _speed;
		_position = Interpolation.Calculate(50, 125, _progress);
	}
}

Conversion

Numbers

Want to convert that Vector<float> into a Vector<int> but don't want to do this?

var newPosition = new Vector<int>((int)position.X, (int)position.Y);

You're in luck because you can just do this :

var newPosition = position.ToInt();
var newSize = size.ToDouble();
var newRectangle = rectangle.ToULong();

These extension methods are available for Vector2, Vector3, Rectangle and Size.

Mathemancy.Randomness

We have two services to generate random numbers. One of them is a more predictable pseudo random number generator while the other is a more cryptographically-secure generator.

While more predictable, the pseudo generator is a lot faster so I recommend using it if performance is an issue or if you need to generate a lot of random numbers often.

Both services share the same base interface so they are used in the exact same way and offer the same capabilities.

Disclaimer : These services provide common use cases for generating random numbers. If you need it to do some other weird things then it's probably not for you 😦

Getting started

If you already use [AutoInject] then you only need to inject IPseudoRandomNumberGenerator and/or ISecureRandomNumberGenerator to a class in order to use it.

If not, you can use the following method when injecting services :

services.AddRandomness();

If you don't use dependency injection at all then you can just instantiate the classes directly and use them.

Breaking changes

Mathemancy 1.0.7 → 1.1.0

  • Linear interpolation has been moved to Mathemancy.Interpolation
  • Mathematics.Interpolate and GetDelta for Vector2 are now extension methods
Product Compatible and additional computed target framework versions.
.NET net7.0 is compatible.  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. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.
  • net7.0

    • No dependencies.

NuGet packages (2)

Showing the top 2 NuGet packages that depend on ToolBX.Mathemancy.Interpolation:

Package Downloads
ToolBX.Mathemancy

A bundle for generic geometry types such as Vector2<T>, Size<T> and Rectangle<T>

ToolBX.ColorFull

A lightweight re-implementation of the color struct.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
2.2.1 1,096 1/12/2024
2.2.0 103 1/12/2024
2.2.0-beta4 92 1/10/2024
2.2.0-beta3 186 1/7/2024
2.2.0-beta2 128 12/13/2023
2.2.0-beta1 83 12/12/2023
2.0.3 155 9/23/2023
2.0.3-beta3 107 9/22/2023
2.0.3-beta2 100 9/17/2023
2.0.2 412 6/19/2023
2.0.1 691 4/26/2023
2.0.0 461 11/15/2022
2.0.0-beta1 509 9/22/2022
1.0.0 2,915 7/17/2022