资源描述:
《贝塞尔曲线及插值》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、贝塞尔曲线及插值2010-07-0121:41 贝塞尔曲线介绍可参考中文维基百科,图文并茂,这里就不啰嗦了http://zh.wikipedia.org/zh-cn/%E8%B2%9D%E8%8C%B2%E6%9B%B2%E7%B7%9A 这里主要讲一下如何在excel及vb中实现贝塞尔曲线插值,程序来源于互联网(程序作者:海底眼(Mr.DragonPan在excel中用宏实现),本文作为少量修改,方便在vb中调用,经运行证明是没错的,下面程序可作成一个模块放到vb或vba中调用: -----------------
2、--------------------------------------------------------------------' Excel的平滑线散点图,可以根据两组分别代表X-Y坐标的散点数值产生曲线图' 但是,却没有提供这个曲线图的公式,所以无法查找曲线上的点坐标' 后来我在以下这个网页找到了详细的说明和示例程序' ..............................................................................' http://www.xlrotor.com/Sm
3、ooth_curve_bezier_example_file.zip' ..............................................................................' 根据其中采用的算法,进一步增添根据X坐标求Y坐标,或根据Y坐标求X坐标,更切合实际需求' 这个自定义函数按照Excel的曲线算法(三次贝塞尔分段插值),计算平滑曲线上任意一点的点坐标'' Excel的平滑曲线的大致算法是:' 给出了两组X-Y数值以后,每一对X-Y坐标称为节点,然后在每两个节点之间画出三次贝塞尔
4、曲线(下面简称曲线)' 贝塞尔曲线的算法网上有很多资源,这里不介绍了,只作简单说明' 每条曲线都由四个节点开始,计算出四个贝塞尔控制点,然后根据控制点画出唯一一条曲线' 假设曲线的源数据是节点1,节点2,节点3,节点4(Dot1,Dot2,Dot3,Dot4)' 那么贝塞尔控制点的计算如下 ' Dot2是第一个控制点,也是曲点的起点,Dot3是第四个控制点也是曲线的终点'' 第二个控制点的位置是:' 过第一个控制点(Dot2,起点),与Dot1,Dot3的连线平行,且与Dot2距离为1/6*线段Dot1
5、_Dot3的长度' 假如是图形的第一段曲线,取节点1,1,2,3进行计算,即Dot2=Dot1' 且第二个控制点与第一控制点距离取1/3*
6、Dot1_Dot3
7、,而不是1/6*
8、Dot1_Dot3
9、' 假如1/2*
10、Dot2_Dot3
11、<1/6*
12、Dot1_Dot3
13、' 那么第二个控制点与第一控制点距离取1/2*
14、Dot2_Dot3
15、,而不是1/6*
16、Dot1_Dot3
17、'' 第三个控制点的位置是:' 过第四个控制点(Dot3,终点),与Dot2,Dot4的连线平行,且与Dot3距离为1/6*
18、D
19、ot2_Dot4
20、' 假如是图形的最后一段曲线,取节点Last-2,Last-1,Last,Last进行计算,即Dot4=Dot3' 且第三个控制点与第四控制点距离取1/3*
21、Dot2_Dot4
22、,而不是1/6*
23、Dot2_Dot4
24、' 假如1/2*
25、Dot2_Dot3
26、<1/6*
27、Dot2_Dot4
28、' 那么第二个控制点与第一控制点距离取1/2*
29、Dot2_Dot4
30、,而不是1/6*
31、Dot2_Dot4
32、'...................................................
33、............................................' 这个自定义函数的计算流程是' Step1:检查输入的X-Y数值是否有错误,如(输入不够三个点,X-Y的数量不一致,起始搜索节点超过范围等等)' Step2:从参数指定的节点开始,计算出四个贝塞尔控制点,得到贝塞尔插值多项式方程,' 然后代入已知的待求数值,看它能不能满足f(t)=0有解(即曲线包含待查数值)' Step3:如果f(t)=0有解,根据解出来的t值计算X-Y坐标,退出程序,否则继续检查下一段曲线' Step4:如果所有分段曲线都不包
34、含待查数值,退出程序'..................................................