【问题标题】:C++ interpolate array with cosineC++ 用余弦插值数组
【发布时间】:2014-12-12 16:08:40
【问题描述】:

我从[这个网站]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)
    }
}

【问题讨论】:

  • 只是将number_of_positions_between_the_pointsposition转换成mu的问题。微不足道的数学。
  • 如何“转换为 mu”?对不起,我只是不明白。

标签: c++ arrays interpolation trigonometry


【解决方案1】:

你有点之间的位置数,然后你有当前位置。将mu 视为由当前位置确定的第一个点和第二个点之间的线性距离与位置总数的百分比。那就是:

mu = (double)current_position / number_of_positions_between_the_points;

这将为您提供01 之间的值,以固定增量,由您希​​望在两点之间拥有的位置数决定。

提示:在您的循环中,j 是当前位置。

您必须处理的另一件事是您正在调用一个名为Interpolate(point_a, point_b, 2048, j) 的函数,但您尚未显示该函数的实现。相反,您拥有CosineInterpolate 函数。大概你想通过从Interpolate 调用CosineInterpolate 来抽象插值方法。答案的第一部分告诉你如何做到这一点。我希望这会有所帮助!

【讨论】:

  • 感谢您的帮助!...嗯,整个“0 到 1”可能是个问题,因为我需要 point_a 值到 point_b 值。不幸的是,这不是我的问题的结束。我什至没有问正确的问题。我认为我真正需要的是所谓的“平滑”(不是插值)。
  • @ElanHickler "0 到 1" 不会有问题。这就是 mu 在该等式中所需要的。将其视为百分比(0 = 0% 1= 100%)。这就是使插值点出现在point_apoint_b 之间的原因(point_a 为 0%,point_b 为 100%)。为方便起见,只需尝试在 4 点之间进行数学运算。 mu 将采用以下值:0.25 0.5、0.75、1。
猜你喜欢
  • 1970-01-01
  • 2015-05-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多