社区
数据结构与算法
帖子详情
有人知道贝赛尔曲线的算法么?
duldul
2001-06-06 04:28:00
我要C语言的!
...全文
123
4
打赏
收藏
有人知道贝赛尔曲线的算法么?
我要C语言的!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
4 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Poxay
2001-06-11
打赏
举报
回复
什么意思?
公式不是现成的吗?
Arter
2001-06-09
打赏
举报
回复
/*
三次Bezier.c曲线
Tc 2.0
*/
#include <graphics.h>
float px[10]={50,80,120,140,180,230,270,380,430};//x坐标,10个点!
float py[10]={100,230,230,160,50,50,120,230,150};//y坐标
main()
{
float a0,a1,a2,a3,b0,b1,b2,b3;
int k,x,y;
float i,t,dt,n=10;
int graphDriver=DETECT;
int graphMode=0;
initgraph(&graphDriver,&graphMode,"");
setbkcolor(BLUE);
setcolor(YELLOW);
dt=1/n;
for (k=0;k<10-1;k++)
{
moveto(px[k],py[k]);
lineto(px[k+1],py[k+1]);
}
for (k=0;k<10-3;k+=3)
{
a0=px[k];
a1=-3*px[k]+3*px[k+1];
a2=3*px[k]-6*px[k+1]+3*px[k+2];
a3=-px[k]+3*px[k+1]-3*px[k+2]+2*px[k+3];
b0=py[k];
b1=-3*py[k]+3*py[k+1];
b2=3*py[k]-6*py[k+1]+3*py[k+2];
b3=-py[k]+3*py[k+1]-3*py[k+2]+2*py[k+3];
for (i=0;i<n;i+=0.1)
{
t=i*dt;
x=a0+a1*t+a2*t*t+a3*t*t*t;
y=b0+b1*t+b2*t*t+b3*t*t*t;
if (i==0) moveto(x,y);
lineto(x,y);
}
}
getch();
closegraph();
return;
}
Arter
2001-06-07
打赏
举报
回复
我帮你去找找!
flyrun
2001-06-07
打赏
举报
回复
试试这个:
我用的效果很好。
//******************************************************************************
//第一种边界条件的三次样条函数插值光滑曲线
//double *x,×y:给定节点的x、y坐标
//int n:节点个数
//double ×dy:dy[0]存放给定的左端点处的一阶导数值,
// dy[n-1]存放给定的右端点的一阶导数值。
//double ×ddy:存放给定节点的二阶导数值。
//double ×t:长度为m,存放m个指定插值点的值。要求x[0]<t[j]<x[n-1],(j=0,1,...,m-1)
//int m:指定插值点的个数
//double ×z:长度为m,存放m个指定插值点处的函数值
//double ×dz:长度为m,存放m个指定插值点处的一阶导数值
//double ×ddz:长度为m,存放m个指定插值点处的二阶导数值
//******************************************************************************
double Curve3(double *x,double *y,int n,double *dy,double *ddy,
double *t,int m,double *z,double *dz,double *ddz)
{
int i,j;
double h0,h1,alpha,beta,g,*s;
s=new double[n];
s[0]=dy[0];dy[0]=0.0;
h0=x[1]-x[0];
for(j=1;j<=n-2;j++)
{
h1=x[j+1]-x[j];
alpha=h0/(h0+h1);
beta=(1.0-alpha)*(y[j]-y[j-1])/h0;
beta=3.0*(beta+alpha*(y[j+1]-y[j])/h1);
dy[j]=-alpha/(2.0+(1.0-alpha)*dy[j-1]);
s[j]=(beta-(1.0-alpha)*s[j-1]);
s[j]=s[j]/(2.0+(1.0-alpha)*dy[j-1]);
h0=h1;
}
for(j=n-2;j>=0;j--)
dy[j]=dy[j]*dy[j+1]+s[j];
for(j=0;j<=n-2;j++)
s[j]=x[j+1]-x[j];
for(j=0;j<=n-2;j++)
{
h1=s[j]*s[j];
ddy[j]=6.0*(y[j+1]-y[j])/h1-2.0*(2.0*dy[j]+dy[j+1])/s[j];
}
h1=s[n-2]*s[n-2];
ddy[n-1]=6.0*(y[n-2]-y[n-1])/h1+2.0*(2.0*dy[n-1]+dy[n-2])/s[n-2];
g=0.0;
for(i=0;i<=n-2;i++)
{
h1=0.5*s[i]*(y[i]+y[i+1]);
h1=h1-s[i]*s[i]*s[i]*(ddy[i]+ddy[i+1])/24.0;
g+=h1;
}
for(j=0;j<=m-1;j++)
{
if(t[j]>=x[n-1])
i=n-2;
else
{
i=0;
while(t[j]>x[i+1]) i++;
}
h1=(x[i+1]-t[j])/s[i];
h0=h1*h1;
z[j]=(3.0*h0-2.0*h0*h1)*y[i];
z[j]=z[j]+s[i]*(h0-h0*h1)*dy[i];
dz[j]=6.0*(h0-h1)*y[i]/s[i];
dz[j]=dz[j]+(3.0*h0-2.0*h1)*dy[i];
ddz[j]=(6.0-12.0*h1)*y[i]/(s[i]*s[i]);
ddz[j]=ddz[j]+(2.0-6.0*h1)*dy[i]/s[i];
h1=(t[j]-x[i])/s[i];
h0=h1*h1;
z[j]=z[j]+(3.0*h0-2.0*h0*h1)*y[i+1];
z[j]=z[j]-s[i]*(h0-h0*h1)*dy[i+1];
dz[j]=dz[j]-6.0*(h0-h1)*y[i+1]/s[i];
dz[j]=dz[j]+(3.0*h0-2.0*h1)*dy[i+1];
ddz[j]=ddz[j]+(6.0-12.0*h1)*y[i+1]/(s[i]*s[i]);
ddz[j]=ddz[j]-(2.0-6.0*h1)*dy[i+1]/s[i];
}
delete s;
return g;
}
非label的贪食蛇简单实现
算法
通过重写paint方法直接按像素点绘制的贪食蛇,只做了简单移动功能,因为蛇的身体是一个List,所以吃东西的判定和死亡...有兴趣的人去完善吧。 刚刚打算上传时想想还是加一些注释好了。 运行GameFrame里面的main方法
Android进阶之高级UI
课程内容涉及Activity启动流程,UI绘制的流程及原理Android画笔,画布,动画,
贝
塞尔
曲线
,滤镜等。实战带大家实现相机各种滤镜效果,和粒子爆炸效果。有问题欢迎私信我,我看到会第一时间回复。 课程大纲如下: 第...
计算器(可以算好多东西)
这是常用的2阶滤波电路,支持高低通,巴特沃斯和
贝
塞尔
算法
.可以从R,C求F(勾选<反算F>);也可以从F,R(或C)求C(或R).选择相应的功能,并正确填写相关参数(均需要大于0),点击<计算>即可. 9.差分二阶LPF 这个电路常用于...
数据结构与算法
33,008
社区成员
35,326
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章