94 lines
5.3 KiB
C#
94 lines
5.3 KiB
C#
using UnityEngine;
|
|
|
|
namespace RR.Common.Utility
|
|
{
|
|
public static class MathUtils
|
|
{
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="fromMin">Минимум исходного диапазона</param>
|
|
/// <param name="fromMax">Максимум исходного диапазона</param>
|
|
/// <param name="toMin">Минимум целевого диапазона</param>
|
|
/// <param name="toMax">Максимум целевого диапазона</param>
|
|
/// <returns>Преобразованное значение</returns>
|
|
public static float Remap(float value, float fromMin, float fromMax, float toMin, float toMax)
|
|
{
|
|
// Нормализуем значение в диапазон [0, 1]
|
|
float t = (value - fromMin) / (fromMax - fromMin);
|
|
|
|
// Переносим в целевой диапазон
|
|
return Mathf.Lerp(toMin, toMax, t);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [from] в диапазон [to].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="from">Исходный диапазон (x - минимум, y - максимум)</param>
|
|
/// <param name="to">Целевой диапазон (x - минимум, y - максимум)</param>
|
|
/// <returns>Преобразованное значение</returns>
|
|
public static float Remap(float value, Vector2 from, Vector2 to)
|
|
{
|
|
float t = (value - from.x) / (from.y - from.x);
|
|
return Mathf.Lerp(to.x, to.y, t);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="fromMin">Минимум исходного диапазона</param>
|
|
/// <param name="fromMax">Максимум исходного диапазона</param>
|
|
/// <param name="toMin">Минимум целевого диапазона</param>
|
|
/// <param name="toMax">Максимум целевого диапазона</param>
|
|
/// <returns>Преобразованное значение (округленное)</returns>
|
|
public static int Remap(int value, int fromMin, int fromMax, int toMin, int toMax)
|
|
{
|
|
float t = (float)(value - fromMin) / (fromMax - fromMin);
|
|
return Mathf.RoundToInt(Mathf.Lerp(toMin, toMax, t));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [from] в диапазон [to].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="from">Исходный диапазон (x - минимум, y - максимум)</param>
|
|
/// <param name="to">Целевой диапазон (x - минимум, y - максимум)</param>
|
|
/// <returns>Преобразованное значение (округленное)</returns>
|
|
public static int Remap(int value, Vector2Int from, Vector2Int to)
|
|
{
|
|
float t = (float)(value - from.x) / (from.y - from.x);
|
|
return Mathf.RoundToInt(Mathf.Lerp(to.x, to.y, t));
|
|
}
|
|
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="fromMin">Минимум исходного диапазона</param>
|
|
/// <param name="fromMax">Максимум исходного диапазона</param>
|
|
/// <param name="toMin">Минимум целевого диапазона</param>
|
|
/// <param name="toMax">Максимум целевого диапазона</param>
|
|
/// <returns>Преобразованное значение</returns>
|
|
public static double Remap(double value, double fromMin, double fromMax, double toMin, double toMax)
|
|
{
|
|
double t = (value - fromMin) / (fromMax - fromMin);
|
|
return toMin + (toMax - toMin) * t;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Линейно переносит значение из диапазона [from] в диапазон [to].
|
|
/// </summary>
|
|
/// <param name="value">Исходное значение</param>
|
|
/// <param name="from">Исходный диапазон (x - минимум, y - максимум)</param>
|
|
/// <param name="to">Целевой диапазон (x - минимум, y - максимум)</param>
|
|
/// <returns>Преобразованное значение</returns>
|
|
public static double Remap(double value, Vector2 from, Vector2 to)
|
|
{
|
|
double t = (value - from.x) / (from.y - from.x);
|
|
return to.x + (to.y - to.x) * t;
|
|
}
|
|
}
|
|
} |