我从[本网站] 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)
e.g。
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 :(得分:2)
你有两个点之间的位置数,然后你有当前位置。将mu
视为第一个点与第二个点之间的线性距离的百分比,该距离由当前位置和位置总数确定。那就是:
mu = (double)current_position / number_of_positions_between_the_points;
这将为您提供0
和1
之间的固定增量值,取决于您希望在各点之间保持多少个位置。
提示:在你的循环中,j
是当前位置。
您必须处理的另一件事是您正在调用名为Interpolate(point_a, point_b, 2048, j)
的函数,但您还没有显示该函数的实现。相反,您拥有CosineInterpolate
功能。大概你想通过从CosineInterpolate
调用Interpolate
来抽象插值方法。答案的第一部分告诉你如何做到这一点。我希望这有帮助!