C ++ интерполирующий массив с косинусом

Я получил эту функцию от [этого сайта]http://paulbourke.net/miscellaneous/interpolation/):

double CosineInterpolate(
double y1,double y2,
double mu)
{
double mu2;

mu2 = (1-cos(mu*PI))/2;
return(y1*(1-mu2)+y2*mu2);
}

Как я могу использовать это для интерполяции массива? Вот как я буду вызывать функцию.

Interpolate(point_a, point_b, number_of_positions_between_the_points, position)

например

for (int i = 0; i < ArrayOfPoints.size()-1; ++i) {
double point_a = ArrayOfPoints[i];
double point_b = ArrayOfPoints[i+1];
for (int j = 0; j < 2048; ++j){
array[j] = Interpolate(point_a, point_b, 2048, j)
}
}

0

Решение

У вас есть количество позиций между точками, а затем у вас есть текущая позиция. Думать о mu в процентах от линейного расстояния между первой точкой и второй, которое определяется текущей позицией, и общего количества позиций. То есть:

mu = (double)current_position / number_of_positions_between_the_points;

Это даст вам значения между 0 а также 1, с фиксированными приращениями, определяется тем, сколько позиций вы хотите иметь между точками.

намек: В вашем цикле, j текущая позиция

Другая вещь, с которой вам приходится иметь дело, это то, что вы вызываете функцию с именем Interpolate(point_a, point_b, 2048, j) но вы не показали реализацию этой функции. Вместо этого у вас есть CosineInterpolate функция. Предположительно, вы хотели абстрагировать метод интерполяции, вызвав CosineInterpolate от Interpolate, Первая часть ответа рассказывает, как это сделать. Надеюсь, это поможет!

2

Другие решения