Косинусная интерполяция с целыми числами - PullRequest
2 голосов
/ 27 января 2012

Хорошо, так что я в последнее время изучал интерполяцию.К сожалению, почти каждая статья, которую я только читаю, обсуждает интерполяцию на десятичном уровне от 0,0 до 1,0, если быть точным.Я хотел бы интерполировать целые числа, независимо от того, насколько они велики, отрицательные или нет.Я сделал это с помощью линейной интерполяции:

public int interpolate(int y1, int y2, int length, int x){
    return y1 + x * (y2 - y1) / (length-1);
}

Однако я застрял с косинусной интерполяцией. В этой замечательной статье говорится об косинусной интерполяции, однако она описана выше в системе чисел от 0,0 до 1,0.Вот что у меня есть:

public int interpolate(int y1, int y2, int length, int x){
    int v = (int)(y2 - Mathf.Cos(x * 3.1415f))/2;
    return (y1 + x * (y2 - y1) / (length-1)) * v;
}

Это не работает, хотя возвращает почти случайное число без реального направления, что делает его вообще не плавным.Здесь мне нужна твоя помощь.Короче говоря: как создать косинусную интерполяционную функцию, которая работает с целыми числами?

1 Ответ

1 голос
/ 27 января 2012

Вам нужно

(int) ((1+cos(pi*x / (length-1)))/2 * (y1-y2)+y2)

Косинус идет от 1 до -1, а угол идет от 0 до пи.Добавьте 1 и разделите на два, и вы получите красивую функцию, которая идет от 1 до 0. Остальное преобразует аргумент.

...