100分求三次B样条的程序 我现在做的程序是:在VB环境下,根据已知数据,利用三次B样条函数光滑,请求帮助,奉送100分作为报答! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 这儿有个C语言的你参照一下吧三次B样条曲线的基函数为G03(t)=1/6(-t^3+3*t^2-3*t+1)G13(t)=1/6(3*t^3-6*t^2+4)G23(t)=1/6(-3*t^3+3*t^2+3*t+1)G33(t)=1/6*t^3三次B样条曲线段P3(t)=1/6*[t^3 t^2 t 1][-1 3 -3 1 3 -6 3 0 -3 0 3 0 (T) 1 4 1 0][p0 p1 p2 p3]-->(转置)四个离散点为 p0 p1 p2 p3#include<graphics.h>#include<conio.h>#define N 10float px[N]={60,95,152,117,225,302,380,318,449,502};float py[N]={98,65,54,152,243,98,102,202,248,130};main(){ float a0,a1,a2,a3,b0,b1,b2,b3; int k,x,y; float i,t,dt; int graphDriver=DETECT; int graphMode=0; initgraph(&graphDriver,&graphMode,""); setbkcolor(BLUE); setcolor(YELLOW); line(50,300,600,300); line(100,10,100,320); dt=1/(float)N; for(k=0;k<N;k++) { if(k==0) moveto(px[k]+100,300-py[k]); lineto(px[k]+100,300-py[k]); } setlinestyle(0,0,3); for(k=0;k<N-3;k++) { a0=(px[k]+4*px[k+1]+px[k+2])/6; a1=(px[k+2]-px[k])/2; a2=(px[k]-2*px[k+1]+px[k+2])/2; a3=-(px[k]-3*px[k+1]+3*px[k+2]-px[k+3])/6; b0=(py[k]+4*py[k+1]+py[k+2])/6; b1=(py[k+2]-py[k])/2; b2=(py[k]-2*py[k+1]+py[k+2])/2; b3=-(py[k]-3*py[k+1]+3*py[k+2]-py[k+3])/6; for(i=0;i<N;i+=0.1) { t=i*dt; x=100+a0+a1*t+a2*t*t+a3*t*t*t; y=300-(b0+b1*t+b2*t*t+b3*t*t*t); if(i==0.0) moveto(x,y); lineto(x,y); } } getch(); closegraph();} 1、float px[N]={60,95,152,117,225,302,380,318,449,502}; float py[N]={98,65,54,152,243,98,102,202,248,130}; 是离散点数据是不是,后面的画的线是什么意思? line(50,300,600,300); line(100,10,100,320); 2、 for(k=0;k <N;k++) { if(k==0) moveto(px[k]+100,300-py[k]); lineto(px[k]+100,300-py[k]); } setlinestyle(0,0,3); for(k=0;k <N-3;k++) 这段代码是什么意思? 3、x=100+a0+a1*t+a2*t*t+a3*t*t*t; y=300-(b0+b1*t+b2*t*t+b3*t*t*t); 其中100、300是指什么? 我来解释吧数组后的大括号内的数据确是初始数据。lineto 是画线,参数分别是x1,x2,y1,y2中间一段也是画线,看一下就明白。最后的100、300是图像的初始横纵坐标。这些跟算法都没有关系的。 我找了一段代码,但运行出来结果不对,请问哪儿出错,请帮忙修改Private Sub Command1_Click() Dim cx, cy, i, n As Integer n = 9 Dim t, t2, t3, a0, a1, a2, a3, b0, b1, b2, b3, dt, xa, ya As Double cx = 10 cy = 160 Dim x(4), y(4) As Integer Picture1.Scale (0, 0)-(300, 300) x(0) = 30: x(1) = 60: x(2) = 120: x(3) = 220 y(0) = 30: y(1) = 110: y(2) = 150: y(3) = 50 Picture1.DrawWidth = 5 For i = 0 To 3 Picture1.PSet (x(i), y(i)), RGB(255, 0, 0) Next i Picture1.DrawWidth = 2 For i = 0 To 2 Picture1.Line (x(i), y(i))-(x(i + 1), y(i + 1)), RGB(255, 255, 0) Next i a0 = (x(0) + 4 * x(1) + x(2)) / 6 a1 = -(x(0) - x(2)) / 2 a2 = (x(2) - 2 * x(1) + x(0)) / 2 a3 = -(y(0) - 3 * y(1) + 3 * y(2) - y(3)) / 6 b0 = (y(0) + 4 * y(1) + y(2)) / 6 b1 = -(y(0) - y(2)) / 2 b2 = (y(2) - 2 * y(1) + y(0)) / 2 b3 = -(y(0) - 3 * y(1) + 3 * y(2) - y(3)) / 6 dt = 1 / n For i = 1 To n Step 0.1 t = i * dt t2 = t * t t3 = t2 * t xa = a0 + a1 * t + a2 * t2 - a3 * t3 + cx ya = cy - (b0 + b1 * t + b2 * t2 + b3 * t3) Picture1.PSet (xa, ya) Next iEnd Sub 大侠们,帮我解释一下这个语句是什么意思啊?谢谢啦 大家帮帮忙啊,xp与2000系统之间sql的通讯 调用excel制作单据,在线等待!!!! Winsock文件传送问题 新手问有关传参数的简单问题,在线等 求深圳的朋友指点一二!散分! 如何用VB往EXCEL里写值,并生成文件? 求助!!!! INSERT 时出错 vb的数据库中怎样显示图表?最好能够句处例子!谢谢! 谁能解说一下这个API的使用 请教如何用 VB实现 检测关机动作并 msgbox "closeing.."
三次B样条曲线的基函数为G03(t)=1/6(-t^3+3*t^2-3*t+1)
G13(t)=1/6(3*t^3-6*t^2+4)
G23(t)=1/6(-3*t^3+3*t^2+3*t+1)
G33(t)=1/6*t^3三次B样条曲线段P3(t)=1/6*[t^3 t^2 t 1][-1 3 -3 1
3 -6 3 0
-3 0 3 0 (T)
1 4 1 0][p0 p1 p2 p3]-->(转置)四个离散点为 p0 p1 p2 p3
#include<graphics.h>
#include<conio.h>
#define N 10float px[N]={60,95,152,117,225,302,380,318,449,502};
float py[N]={98,65,54,152,243,98,102,202,248,130};main()
{
float a0,a1,a2,a3,b0,b1,b2,b3;
int k,x,y;
float i,t,dt; int graphDriver=DETECT;
int graphMode=0;
initgraph(&graphDriver,&graphMode,""); setbkcolor(BLUE);
setcolor(YELLOW); line(50,300,600,300);
line(100,10,100,320); dt=1/(float)N;
for(k=0;k<N;k++)
{
if(k==0)
moveto(px[k]+100,300-py[k]);
lineto(px[k]+100,300-py[k]);
}
setlinestyle(0,0,3);
for(k=0;k<N-3;k++)
{
a0=(px[k]+4*px[k+1]+px[k+2])/6;
a1=(px[k+2]-px[k])/2;
a2=(px[k]-2*px[k+1]+px[k+2])/2;
a3=-(px[k]-3*px[k+1]+3*px[k+2]-px[k+3])/6; b0=(py[k]+4*py[k+1]+py[k+2])/6;
b1=(py[k+2]-py[k])/2;
b2=(py[k]-2*py[k+1]+py[k+2])/2;
b3=-(py[k]-3*py[k+1]+3*py[k+2]-py[k+3])/6; for(i=0;i<N;i+=0.1)
{
t=i*dt;
x=100+a0+a1*t+a2*t*t+a3*t*t*t;
y=300-(b0+b1*t+b2*t*t+b3*t*t*t);
if(i==0.0)
moveto(x,y);
lineto(x,y);
}
}
getch();
closegraph();
}
float py[N]={98,65,54,152,243,98,102,202,248,130};
是离散点数据是不是,后面的画的线是什么意思?
line(50,300,600,300);
line(100,10,100,320);
2、 for(k=0;k <N;k++)
{
if(k==0)
moveto(px[k]+100,300-py[k]);
lineto(px[k]+100,300-py[k]);
}
setlinestyle(0,0,3);
for(k=0;k <N-3;k++)
这段代码是什么意思?
3、x=100+a0+a1*t+a2*t*t+a3*t*t*t;
y=300-(b0+b1*t+b2*t*t+b3*t*t*t);
其中100、300是指什么?
lineto 是画线,参数分别是x1,x2,y1,y2中间一段也是画线,看一下就明白。最后的100、300是图像的初始横纵坐标。这些跟算法都没有关系的。
Private Sub Command1_Click()
Dim cx, cy, i, n As Integer
n = 9
Dim t, t2, t3, a0, a1, a2, a3, b0, b1, b2, b3, dt, xa, ya As Double
cx = 10
cy = 160
Dim x(4), y(4) As Integer
Picture1.Scale (0, 0)-(300, 300)
x(0) = 30: x(1) = 60: x(2) = 120: x(3) = 220
y(0) = 30: y(1) = 110: y(2) = 150: y(3) = 50
Picture1.DrawWidth = 5 For i = 0 To 3
Picture1.PSet (x(i), y(i)), RGB(255, 0, 0)
Next i
Picture1.DrawWidth = 2
For i = 0 To 2
Picture1.Line (x(i), y(i))-(x(i + 1), y(i + 1)), RGB(255, 255, 0)
Next i
a0 = (x(0) + 4 * x(1) + x(2)) / 6
a1 = -(x(0) - x(2)) / 2
a2 = (x(2) - 2 * x(1) + x(0)) / 2
a3 = -(y(0) - 3 * y(1) + 3 * y(2) - y(3)) / 6
b0 = (y(0) + 4 * y(1) + y(2)) / 6
b1 = -(y(0) - y(2)) / 2
b2 = (y(2) - 2 * y(1) + y(0)) / 2
b3 = -(y(0) - 3 * y(1) + 3 * y(2) - y(3)) / 6
dt = 1 / n
For i = 1 To n Step 0.1
t = i * dt
t2 = t * t
t3 = t2 * t
xa = a0 + a1 * t + a2 * t2 - a3 * t3 + cx
ya = cy - (b0 + b1 * t + b2 * t2 + b3 * t3)
Picture1.PSet (xa, ya)
Next i
End Sub