Ferguson曲线原理及绘制程序
2014-06-05 20:01
375 查看
给定两点P0 P1和两点处的切线P0t P1t,可以确定两点间的三次曲线。曲线的参数方程为:
P(u) = a * u^3 + b* u^2 + c * u + d
导数 P(u)t = 3*a*u^2 + 2*b*u + c
带入可得
d = P0
a + b + c +d = P1
c = P0t
3a + 2b + c = P1t
-->
a = 2 * P0 - 2 * P1 + P0t + P1t
b = -3 * P0 + 3 * P1 - 2 * P0t - P1t
c = P0t
d = P0
--->
2 -2 1 1 P0
P(u) = [u^3 u^2 u 1][ -3 3 -2 -1 ] [ P1 ]
0 0 1 0 P0t
1 0 0 0 P1t
当给定多个点时保证连接点的切线大小方向相同,曲线连续。
下图中蓝色点为型值点(P0, P1, ...),红色点是为了绘制曲线生成的插值点,绿色为型值点处切线矢量。
此图中Pn点处的切失为(Pn+1 - Pn-1)/2
SplineDrawer_Ferguson说明:
Vec2.h Vec2.cpp定义了一个简单的二维矢量类
SDSpline.h SDSpline.cpp实现了Ferguson曲线型值点管理,曲线插值计算功能。
ChildView显示曲线并提供菜单响应
操作:
菜单 -- DrawSpline -- Begin: 清空当前绘制,并开始新绘制
菜单 -- DrawSpline -- End: 结束绘制,完成曲线
补充:
SDSpline每插入一个型值点Pn会先计算前一个点Pn-1的切失,然后生成Pn-2到Pn-1之间的曲线,曲线内部插值采用均匀插值固定点数的方式生成插值点,点击End菜单时将使最后一个点的切失为0,0,完成曲线绘制
程序下载地址:
http://download.csdn.net/detail/piaobotudou/7453109
P(u) = a * u^3 + b* u^2 + c * u + d
导数 P(u)t = 3*a*u^2 + 2*b*u + c
带入可得
d = P0
a + b + c +d = P1
c = P0t
3a + 2b + c = P1t
-->
a = 2 * P0 - 2 * P1 + P0t + P1t
b = -3 * P0 + 3 * P1 - 2 * P0t - P1t
c = P0t
d = P0
--->
2 -2 1 1 P0
P(u) = [u^3 u^2 u 1][ -3 3 -2 -1 ] [ P1 ]
0 0 1 0 P0t
1 0 0 0 P1t
当给定多个点时保证连接点的切线大小方向相同,曲线连续。
下图中蓝色点为型值点(P0, P1, ...),红色点是为了绘制曲线生成的插值点,绿色为型值点处切线矢量。
此图中Pn点处的切失为(Pn+1 - Pn-1)/2
SplineDrawer_Ferguson说明:
Vec2.h Vec2.cpp定义了一个简单的二维矢量类
SDSpline.h SDSpline.cpp实现了Ferguson曲线型值点管理,曲线插值计算功能。
ChildView显示曲线并提供菜单响应
操作:
菜单 -- DrawSpline -- Begin: 清空当前绘制,并开始新绘制
菜单 -- DrawSpline -- End: 结束绘制,完成曲线
补充:
SDSpline每插入一个型值点Pn会先计算前一个点Pn-1的切失,然后生成Pn-2到Pn-1之间的曲线,曲线内部插值采用均匀插值固定点数的方式生成插值点,点击End菜单时将使最后一个点的切失为0,0,完成曲线绘制
程序下载地址:
http://download.csdn.net/detail/piaobotudou/7453109
相关文章推荐
- [Happy DSA] 程序实现绘制箭头的原理
- 趣味C程序100.1 .1 绘制余弦曲线
- c程序基本算法百例之一—绘制余弦曲线
- 趣味C程序100.1 .2 绘制正弦曲线
- 基于MFC串口编程和曲线图绘制(visual studio2008,Teechart绘图控件)的程序总结
- matlab 绘制系统的单位阶跃响应曲线 并编写程序求峰值时间 超调量 [李园7舍_404]
- C程序绘制余弦曲线和直线
- C程序绘制余弦曲线
- c程序基本算法百例之二—绘制余弦曲线和直线
- C语言 程序 绘制余弦曲线和直线 , 绘制cos(x)和sin(x)
- Window画图程序中画曲线的简单实现
- 验证码的程序及原理
- 二级域名原理以及程序代码
- 第二章 Win32程序运行原理
- 记录鼠标轨迹生成vml曲线图程序(可模拟签名)
- 小偷程序原理和简单示例
- 自定义程序流程的原理
- 程序写多了,硬盘的原理都忘记了(记下)
- 漫话验证码缘起,程序原理及其他
- 二值图像跟踪曲线程序