加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

[转载]贝塞尔曲线与圆弧拟合研究

(2014-05-06 15:57:22)
标签:

转载

在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里面可以用来编写路径动画,思路和代码将变得非常简洁。

0

  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有