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