[转载]贝塞尔曲线与圆弧拟合研究
标签:
转载 |
在Office应用程序里绘制自由曲线,用到的都是贝塞尔曲线。
在Excel或者PPT里面绘制自由曲线,如果绘制两个点,那么实际上你得到的是一条直线,如图1所示:
http://s6/middle/6b8f217eg77a6112e4f95&690
图1. 用户绘制的只有“两个点”的自由曲线,显示为直线
但是如果用户编辑自由曲线的顶点(或者称节点),实际上还有两个控制点。在一些矢量图形软件里面,所有的控制点都是显示出来的。但在Office软件里面,只有当用户选择某个节点时,其对应的控制点才会显示出来。对于非封闭的自由曲线,两端节点各自只有一个控制点;中间的节点则有两个控制点. 当然,为了好理解,我们可以将含有多个节点的自由曲线视为多段只有两个节点曲线的组合;那这样,每个节点则只带一个控制点。
图1中的直线貌似有两个节点和两个控制点,在贝塞尔曲线意义下应该有四个点。但是在VBA里面,只能获得两个节点(Shape.Nodes.Count)。
http://s9/middle/6b8f217egac7cabc7a228&690
图2. 编辑控制点,将图1中的直线编程曲线
如果将图1中直线的控制点拖离直线,直线将根据3阶(四个点)的贝塞尔函数转变为3阶的贝塞尔曲线。同时,如果我们在VBA窗口计算该曲线的节点数的话(Shape.Nodes.Count),那么我们得到的是4.
http://s3/middle/6b8f217egac7c88492ab2&690
图3. n阶贝塞尔函数
http://s8/middle/6b8f217egac7c88587f47&690
图4. 3阶贝塞尔函数
理论上讲,只要绘制两个点的自由曲线,我们通过控制它们的控制点,我们便可以得到任意形状的自由曲线!
下面的例子试图用3阶的贝塞尔曲线拟合圆弧。
P0和P3是用户实际上需要绘制的节点;P1和P2则是P0和P3相应的控制点。那其实关键问题是,我们如何设置控制点。
首先,我们需要知道P0,P3和圆点之间的夹角;
接着,P1和P2应该处于P0和P3的夹角三等分位置;
P1,P0和圆点的夹角应该为90度;P2,P3和圆点的夹角为90度。
通过上述数据,可以计算得到控制点P1,P2的坐标。
最后通过这四个点的坐标,利用3阶贝塞尔函数计算拟合曲线,如图5所示:
http://s2/middle/6b8f217egac7c88770201&690
图5. 3阶贝塞尔曲线与圆弧拟合
说明:
本拟合适用于夹角不超过90度的圆弧。
应用:
本人想不出别应用,但是,这在PPT VBA里面可以用来编写路径动画,思路和代码将变得非常简洁。

加载中…