Я получил эту функцию от [этого сайта]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)
}
}
У вас есть количество позиций между точками, а затем у вас есть текущая позиция. Думать о mu
в процентах от линейного расстояния между первой точкой и второй, которое определяется текущей позицией, и общего количества позиций. То есть:
mu = (double)current_position / number_of_positions_between_the_points;
Это даст вам значения между 0
а также 1
, с фиксированными приращениями, определяется тем, сколько позиций вы хотите иметь между точками.
намек: В вашем цикле, j
текущая позиция
Другая вещь, с которой вам приходится иметь дело, это то, что вы вызываете функцию с именем Interpolate(point_a, point_b, 2048, j)
но вы не показали реализацию этой функции. Вместо этого у вас есть CosineInterpolate
функция. Предположительно, вы хотели абстрагировать метод интерполяции, вызвав CosineInterpolate
от Interpolate
, Первая часть ответа рассказывает, как это сделать. Надеюсь, это поможет!