微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决当我想绘制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 举报,一经查实,本站将立刻删除。