我写了这段代码来平滑曲线。一个点旁边需要5个点,并将它们相加并取平均值。
/* Smoothing */ void smoothing(vector<Point2D> &a) { //How many neighbours to smooth int NO_OF_NEIGHBOURS=10; vector<Point2D> tmp=a; for(int i=0;i<a.size();i++) { if(i+NO_OF_NEIGHBOURS+1<a.size()) { for(int j=1;j<NO_OF_NEIGHBOURS;j++) { a.at(i).x+=a.at(i+j).x; a.at(i).y+=a.at(i+j).y; } a.at(i).x/=NO_OF_NEIGHBOURS; a.at(i).y/=NO_OF_NEIGHBOURS; } else { for(int j=1;j<NO_OF_NEIGHBOURS;j++) { a.at(i).x+=tmp.at(i-j).x; a.at(i).y+=tmp.at(i-j).y; } a.at(i).x/=NO_OF_NEIGHBOURS; a.at(i).y/=NO_OF_NEIGHBOURS; } } }
但是我对每个点都获得了非常高的值,而不是与上一个点相似的值。形状最大化很多,该算法出了什么问题?
在以下块中:
for(int j=0;j<NO_OF_NEIGHBOURS;j++) { a.at(i).x=a.at(i).x+a.at(i+j).x; a.at(i).y=a.at(i).y+a.at(i+j).y; }
对于每个邻居,请将a.at(i)的x和y分别添加到邻居值。
我理解正确,应该是这样的。
for(int j=0;j<NO_OF_NEIGHBOURS;j++) { a.at(i).x += a.at(i+j+1).x a.at(i).y += a.at(i+j+1).y }