using UnityEngine; namespace RR.Common.Utility { public static class MathUtils { /// /// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax]. /// /// Исходное значение /// Минимум исходного диапазона /// Максимум исходного диапазона /// Минимум целевого диапазона /// Максимум целевого диапазона /// Преобразованное значение 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); } /// /// Линейно переносит значение из диапазона [from] в диапазон [to]. /// /// Исходное значение /// Исходный диапазон (x - минимум, y - максимум) /// Целевой диапазон (x - минимум, y - максимум) /// Преобразованное значение 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); } /// /// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax]. /// /// Исходное значение /// Минимум исходного диапазона /// Максимум исходного диапазона /// Минимум целевого диапазона /// Максимум целевого диапазона /// Преобразованное значение (округленное) 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)); } /// /// Линейно переносит значение из диапазона [from] в диапазон [to]. /// /// Исходное значение /// Исходный диапазон (x - минимум, y - максимум) /// Целевой диапазон (x - минимум, y - максимум) /// Преобразованное значение (округленное) 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)); } /// /// Линейно переносит значение из диапазона [fromMin, fromMax] в диапазон [toMin, toMax]. /// /// Исходное значение /// Минимум исходного диапазона /// Максимум исходного диапазона /// Минимум целевого диапазона /// Максимум целевого диапазона /// Преобразованное значение 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; } /// /// Линейно переносит значение из диапазона [from] в диапазон [to]. /// /// Исходное значение /// Исходный диапазон (x - минимум, y - максимум) /// Целевой диапазон (x - минимум, y - максимум) /// Преобразованное значение 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; } } }