существует ли метод единства для масштабирования значений массива вниз или до заданного диапазона - PullRequest
0 голосов
/ 23 июня 2019

У меня есть массив значений, скажем, [-5, 10, 20]

, и я хочу уменьшить его до диапазона, скажем, [0, 10]

Я могу сделатьфункция, которая может справиться с этим, но я ищу встроенную функцию в Unity или C #, которая может выполнять ту же работу

вот что я сделал до сих пор, но она не поддерживает отрицательные значения

    float[] arr = new float[] { 5f ,10f ,20f };
    int i = 0;
    float max = Mathf.Max(arr);
    float maxval = 10;
    foreach(float ele in arr)
    {
        arr[i] = (ele / max) * maxval;
        Debug.Log(arr[i]);
        i++;
    }

если arr [-5f, 10f, 20f], возвращается [-2.5f, 5f, 10f]

я ожидаю, что он будет в диапазоне от 0 до 10

1 Ответ

1 голос
/ 23 июня 2019

Нет предустановленного метода для этого, но вы можете попробовать использовать метод InverseLerp из исходного массива, а затем использовать метод Lerp для установки нового массива, что-то вроде этого:

float[] arr = new float[] { 5f ,10f ,20f };
float rangeMin = 0, rangeMax = 10; //these are the values you want to scale down (or up) the original array

float arrayMin = Mathf.Min(arr);
float arrayMax = Mathf.Max(arr);

for(int i=0; i<arr.Length; i++)
{
    var scaledDownValue = Mathf.InverseLerp(arrayMin, arrayMax, arr[i]);
    scaledDownValue = Mathf.Lerp(rangeMin, rangeMax, scaledDownValue);
    arr[i] = scaledDownValue;
}

Не проверено, но обратныйЛерпинг, тогда Лерпинг должен помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...