2
我正試圖編寫一個程序來生成C++中的曲線來繪製B樣條曲線。這是我的代碼看起來像。C++中的B樣條
void drawBSplineCurve(vector<point> poly)
{
int n, d;
cout << "Enter degree of curve: ";
cin >> d;
n = poly.size();
vector<double> uVec;
int i;
for(i=0;i<n+d;i++)
{
uVec.push_back(((double)i)/(n+d-1));
}
double x, y, basis, u;
for(u=0;u<=1;u+=0.0001)
{
x = 0;
y = 0;
for(i=0;i<poly.size();i++)
{
basis = blend(uVec, u, i, d);
x += basis*poly[i].x;
y += basis*poly[i].y;
}
putpixel(roundOff(x), roundOff(y), YELLOW);
}
}
double blend(vector<double> &uVec, double u, int k, int d)
{
if(d==1)
{
if(uVec[k]<=u && u<uVec[k+1])
return 1;
return 0;
}
double b;
b = ((u-uVec[k])/(uVec[k+d-1]-uVec[k])*blend(uVec, u, k, d-1)) + ((uVec[k+d]-u)/(uVec[k+d]-uVec[k+1])*blend(uVec, u, k+1, d-1));
return b;
}
然而,正如你可以從我的輸出曲線,由於某些原因看,往往會開始,並在原點結束(y軸反轉)。任何幫助這個原因,將不勝感激。謝謝:d
你使用哪個圖形庫? –
這是舊的'graphics.h'。可悲的是,我們被教導在大學裏使用它。 – naman1901
我認爲你的'uvec'是錯誤的。它不應該在開始和結束時有重複的價值嗎?此外,注意'blend()'中的零除。 –