求椭圆曲线拟合算法 ( 积分: 100 )

  • 主题发起人 主题发起人 wanpeng
  • 开始时间 开始时间
W

wanpeng

Unregistered / Unconfirmed
GUEST, unregistred user!
已知4个点的坐标,将他们连结成一条平滑曲线,算法是什么?我需要知道曲线各个点坐标,或者是一个函数,而不是画在画布上。
 
已知4个点的坐标,将他们连结成一条平滑曲线,算法是什么?我需要知道曲线各个点坐标,或者是一个函数,而不是画在画布上。
 
哦,这个有点难哦,你不妨用Matlab试试,我以前做过三维的拟合,然后用delphi调用Matlab动态库!
 
算法...使用Bezier曲线,这个是标准的反求控制点的问题。以下是求控制点的程序:
这里的Q0---Q3是已知的4个控制点,
你绘制的Bezier曲线如果要经过这4个点,需要反求控制点;
这里的P0---P3就是反求出的点,以P0---P3为新的控制点
绘制出的Bezier曲线经过Q0---Q3点。

procedure UnControlBezierPoint(var Q0,Q1,Q2,Q3,P0,P1,P2,P3 :TPoint);
begin
P0 :=Q0;
P1.x :=(-5*Q0.x+18*Q1.x-9*Q2.x+2*Q3.x) div 6;
P1.y :=(-5*Q0.y+18*Q1.y-9*Q2.y+2*Q3.y) div 6;
P2.x :=(2*Q0.x-9*Q1.x+18*Q2.x-5*Q3.x) div 6;
p2.y :=(2*Q0.y-9*Q1.y+18*Q2.y-5*Q3.y) div 6;
P3 :=Q3;
end;
下面给你Bezier的三次参数方程
C(t)=(1-t)⒊P0+3t(1-t)⒉P1+3t⒉(1-t)P2+t⒊P3
这里:P0---P3为三次BEZIER曲线的四个控制点,t为参数,c(t)即是BEZIER曲线表达式
 
个人认为,每三个计算一次,过了一个就在计算三个。如下类推!
 
C(t)=(1-t)⒊P0+3t(1-t)⒉P1+3t⒉(1-t)P2+t⒊P3
不明白,P0-P3怎么带入?t代表什么?给个直角坐标的公式好么?
 
也可用三次插值公式

y=y0*(x-x1)*(x-x2)*(x-x3)/((x0-x1)*(x0-x2)*(x0-x3))+
y1*(x-x0)*(x-x2)*(x-x3)/((x1-x0)*(x1-x2)*(x1-x3))+
y2*(x-x0)*(x-x1)*(x-x3)/((x2-x0)*(x2-x1)*(x2-x3))+
y3*(x-x0)*(x-x1)*(x-x2)/((x3-x0)*(x3-x1)*(x3-x2))

拟合曲线,进而描出
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=3154383
 
http://www.2ccc.com/article.asp?articleid=1703

http://www.2ccc.com/article.asp?articleid=1116

可能有点参考价值
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部