拉格朗日的功能有什么问题?

时间:2015-11-06 00:39:15

标签: c++ opengl graphic

 GsVec curve_eval::eval_lagrange(float t, float numberofsegmentsn, const GsArray<GsVec>& ctrlpnts) //f(t) = sum of p.i * B.i(t)
 {  
//float interval = 1 / numberofsegmentsn; //so if 4, then 0.25
float interval = 1 / ctrlpnts.size(); 

//remember that for interval that is put in above, it's based on numbers of ctrlpnts

//for lagrange, let t 
GsVec ft(0.0f, 0.0f, 0.0f);
int sizeofctrlpnts = ctrlpnts.size();
float result = 0;   
std::cout << "interval = " << interval << "  \\ number of segments = " << numberofsegmentsn << " \\ ctrlpnts.size() = " << ctrlpnts.size() << "\n";

float tt = 0;
float ti[50] = { 0 }; 
float tj[50] = { 0 }; //only this might be used
for (int x = 0; x < ctrlpnts.size(); x++) //changed from 'numberofsegmentsn'
{
    tj[x] = tt;//
    std::cout << "tt in tj[" << x << "]= " << tt <<  "\n";
    tt = tt + interval;

}

float tb = 1;
tt = 1;
int i = 0;
for (int i = 0; i < ctrlpnts.size(); i ++)
{
    tt = 1;
    tb = 1;
    for (int j = 0; j < ctrlpnts.size(); j++) // 
    {           
        if (i != j)
        {
            std::cout << "Before cal: i = " << i << " :: j = " << j << " :: tt = " << tt << " :: tb = " << tb << " :: t = " << t << " :: tj[i" << j << "] = " << tj[j] << " :: tj[j" << i << "] = " << tj[i] << "\n";

            tt = (t - tj[j]) * tt;
            tb = (tj[i] - tj[j])* tb;

            std::cout << "After cal: tt = " << tt << " :: tb = " << tb << "\n";
        }
        //t gotta change
    }
    result = tt / tb;
    ft = ft+(ctrlpnts[i]*result);
}

return ft;

上面是我为opengl编写拉格朗日函数的算法。

以下链接是我不得不恭维的公式的屏幕截图,{{3}}。

我一直在调整它,我似乎无法找到它的问题。

0 个答案:

没有答案