带控制手柄的贝塞尔曲线控件——历史、原理、实现

© 2013-2023 Conmajia
Updated on 9th March, 2023
Initiated on 22nd February, 2015

摘要 本文介绍贝塞尔曲线历史和基本原理,并以 .NET Frameworks GDI+ 为例简单实现了一个带控制手柄和可扩展样式的曲线控件.

1 简介

绘图软件中常常用到带控制手柄的曲线,用于精确调整连续变化的数值. 贝塞尔曲线源自一族广泛应用于工程 CAD 和计算机图形学的曲线参数方程,由法国雷诺汽车公司工程师皮埃尔·艾蒂安·贝塞尔(Pierre Étienne Bézier,1910-1999)于 1962 年提出,并基于此开发了 UNISURF 建模系统(1968). 有关贝塞尔函数的详细内容,可以参阅贝塞尔本人撰写的《UNISURF CAD 系统的数学基础》一书(Butterworths,1986,56页).

1.1 贝塞尔函数

贝塞尔函数是一族形为

x 2 y ′ ′ + x y ′ + ( x 2 − n 2 ) y = 0 x^2y''+xy'+\left(x^2-n^2\right)y=0 x2y′′+xy+(x2n2)y=0

的函数,其中 n n n 为阶数。该函数族的解为

y ( x ) = A J n ( x ) + B Y n ( x ) , y(x)=AJ_n(x)+BY_n(x), y(x)=AJn(x)+BYn(x),

其中 J n ( x ) J_n(x) Jn(x) 称为第一类贝塞尔函数 Y n ( x ) Y_n(x) Yn(x) 称为第二类贝塞尔函数.

贝塞尔函数可以看作一族衰减的正弦函数,如图 1 所示,其中 J 0 ( 0 ) = 1 J_0(0)=1 J0(0)=1 Y n ( 0 ) = ∞ Y_n(0)=\infty Yn(0)=.

图 1. 第一类、第二类贝塞尔函数的图形

利用弗罗贝尼乌斯(Frobenius)方法求解可得,

J n ( x ) = ∑ k = 0 ∞ ( − 1 ) k k ! ( n + k ) ! ( x 2 ) n + 2 k Y n ( x ) = 2 π J n ( x ) [ ln ⁡ x 2 + γ ] − 1 π ∑ k = 0 n − 1 ( n − k − 1 ) ! k ! ( x 2 ) 2 k − n − 1 π ∑ k = 0 ∞ ( − 1 ) k [ Φ ( k ) + Φ ( n + k ) ] 1 k ! ( n + k ) ! ( x 2 ) 2 k + n , J_n(x)=\sum_{k=0}^\infty\frac{(-1)^k}{k!(n+k)!}\left(\frac{x}{2}\right)^{n+2k}\\ \begin{aligned} Y_n(x)=&\frac{2}{\pi}J_n(x)\left[\ln\frac{x}{2}+\gamma\right]-\frac{1}{\pi}\sum_{k=0}^{n-1}\frac{(n-k-1)!}{k!}\left(\frac{x}{2}\right)^{2k-n}\\ &-\frac{1}{\pi}\sum_{k=0}^\infty(-1)^k\left[\Phi(k)+\Phi(n+k)\right]\frac{1}{k!(n+k)!}\left(\frac{x}{2}\right)^{2k+n}, \end{aligned} Jn(x)=k=0k!(n+k)!(1)k(2x)n+2kYn(x)=π2Jn(x)[ln2x+γ]π1k=0n1k!(nk1)!(2x)2knπ1k=0(1)k[Φ(k)+Φ(n+k)]k!(n+k)!1

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Conmajia

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值