A JavaScript Quadrati c Функция для имитации кривой Параболи c - PullRequest
0 голосов
/ 02 апреля 2020

Я хочу сгенерировать обратную квадратичную функцию c с массивом (который может быть любого размера). Например, вместо линейного расчета для определения процента выполнения (например, 3/10 * 100 = 30%), я хочу использовать квадратичную кривую c, чтобы процент выравнивался по мере получения ответов на все вопросы до тех пор, пока все вопросы не будут получены. ответ (после того, как на все вопросы дан ответ, он должен быть заполнен на 100%). По определению, квадратичная функция c имеет показатель степени 2, а ведущий коэффициент отрицателен при инвертировании формы.

Обратите внимание на красивую кривую до вершины в следующем параболе c график:

enter image description here

Это то, что я пробовал:

const questions = ['q1', 'q2', 'q3', 'q4', 'q5', 'q6', 'q7', 'q8','q9','q10'];

function inverseQuad(x, len) {
 return ((x)**2) * 100;
}

inverseQuad(.1, 10); // 1%
inverseQuad(.2, 10); // 4%
inverseQuad(.3, 10); // 9%
...
inverseQuad(.9, 10); // 81%
inverseQuad(1, 10); //  100%

Он движется в неправильном направлении. Это не перевернуто. Как я могу очистить эту квадратичную c функцию?

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Один простой способ написать квадратик c, который делает это:

const completion = (qs, total) => Math .round (100 * qs / total *  (2 - qs / total));

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10] .forEach (x => {
  console .log (`${x} => ${completion (x, 10)}`)
})

По сути, это 100 * (1 - (1 - x)**2), где x - фактическая доля завершения. Очевидно, было бы проще, если бы входная доля была такой: const completion = (x) => 100 * x * (2 - x).

Но я должен сказать, что использование этого для того, чтобы люди чувствовали себя лучше в отношении своего процента завершения, выглядит весьма недружелюбно l ie.

0 голосов
/ 02 апреля 2020

Если вы ищете квадри c, это выглядит немного иначе. В большинстве случаев эти кривые используются для анимации, начала, конца и скорости.

Например, вы видите здесь некоторые графики: https://sole.github.io/tween.js/examples/03_graphs.html

К счастью, они уже запрограммированы сценарии для этих кривых здесь: https://github.com/tweenjs/tween.js/blob/master/src/Tween.js

Найдите Quadrati c, вы найдете следующее:

Quadratic: {
    In: function (k) {
        return k * k;
    },

    Out: function (k) {
        return k * (2 - k);
    },

    InOut: function (k) {
        if ((k *= 2) < 1) {
            return 0.5 * k * k;
        }
        return - 0.5 * (--k * (k - 2) - 1);

    }

},

Я думаю, что эта формула является то, что вы ищете, если не посмотрите на один из других графиков и найдите соответствующую формулу.

Примечание: вам нужно иметь нормализованные значения
Примечание: чтобы инвертировать вывод, просто выполните 1 - output

...