当我想绘制B样条曲线时,我遇到了循环问题

问题描述

我想绘制b条样条曲线。为此,我使用了二项式展开式,并创建了一个计算阶乘的函数

int faktoriyel(int don)
{
    int a=1;
    if(don!=0)
    {
        for(int i=don-1; i>0; i--)
        {
            don=don*i;
        }
    }
    else
    {
        don=a;
    }
    return don;
}

当我想绘制太多像素时,for循环是有问题的。我有2个变量:t和k。它需要根据输入的点数形成二项式展开式,但由于嵌套而导致问题循环。

double xtoplam1;
            double ytoplam1;
            int a,b,c;
            int n=sayac-2,k=0;
            double t=0.0;
            int u=sayac-1;
            double xtoplam=0;
            double ytoplam=0;

            for (t=0.0; t<1.0; t=t+0.0005)
            {
                xtoplam1= pow(1-t,u-1)*noktalar[0].x;
                ytoplam1= pow(1-t,u-1)*noktalar[1].y;

                while(k+1<=sayac-1)
                {
                    a=faktoriyel(n);
                    printf("a:%d\n",a);
                    b=faktoriyel(k);
                    printf("b:%d\n",b);
                    c=faktoriyel(n-k);
                    printf("c:%d\n",c);
                    xtoplam = (a/(b*c))*pow(1-t,k+1)*pow(t,n)*noktalar[k+1].x;
                    ytoplam = (a/(b*c))*pow(1-t,n)*noktalar[k+1].y;
                    k++;
                }

                putpixel (getmaxx()/2+((xtoplam+xtoplam1)*20),getmaxy()/2-((ytoplam+ytoplam1)*20),RED);
                printf("x:%f\ny:%f\n",xtoplam+xtoplam1,ytoplam+ytoplam1);
            }

我该如何解决。例如,我有2分。那么函数必须是pow(1-t,3)* x [0] + 3 * t * pow(1-t,2)* x [1] + 3 *战俘(t,2)*(1-t)* x [2] +战俘(t,3)* x [3]然后,“ t”应从0.0005变为1

编辑: 在这种情况下,我也可以使用表,但我认为它是如此原始。例如:

EDIT:
if(sayac-1==4)
            {
                for (t=0.0; t<1.0; t=t+0.0005)
                {
                    xtoplam = pow(1-t,3)*noktalar[0].x+3*pow(1-t,2)*pow(t,1)*noktalar[1].x+3*pow(1-t,1)*pow(t,2)*noktalar[2].x+pow(t,3)*noktalar[3].x;
                    ytoplam = pow(1-t,3)*noktalar[0].y+3*pow(1-t,1)*noktalar[1].y+3*pow(1-t,2)*noktalar[2].y+pow(t,3)*noktalar[3].y;
                    putpixel (getmaxx()/2+((xtoplam)*20),getmaxy()/2-((ytoplam)*20),RED);
                }
            }

这很好。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)