问题描述
我想绘制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 (将#修改为@)