贝塞尔曲线公式

一阶贝塞尔曲线:

 P0为起点,Pn为终点,Pi为控制点

 

二阶贝塞尔曲线:

 

原理:由 P0 至 P1 的连续点 P3,描述一条线段。 
      由 P1 至 P2 的连续点 P4,描述一条线段。 
      由 P3 至 P4 的连续点 P5,描述一条二次贝塞尔曲线。

公式推导:

求P5,P5 根据一阶贝塞尔曲线公式 公式1

 

P3点一样代入 公式2

P4点 公式3

公式3 和公式2代入公式1

合并公式

 

 

 

 

三阶贝塞尔曲线:

 

通用公式

 

转载于:https://www.cnblogs.com/wbaoqing/p/5157769.html

### 二次贝塞尔曲线的数学公式及推导 二次贝塞尔曲线是由三个控制点 \( P_0 \), \( P_1 \), \( P_2 \) 定义的参数曲线。其数学表达式可以通过线性插值逐步推导得出。 #### 公式 二次贝塞尔曲线的数学公式为: \[ B(t) = (1-t)^2P_0 + 2t(1-t)P_1 + t^2P_2, \quad t \in [0, 1] \] 其中,\( t \) 是参数,取值范围为 \( [0, 1] \),表示从起点到终点的插值过程[^4]。 #### 推导过程 为了更好地理解公式的来源,可以将二次贝塞尔曲线看作两次线性插值的结果。 1. **第一次线性插值** 在两个相邻控制点之间进行线性插值,得到两条中间曲线: \[ Q_0(t) = (1-t)P_0 + tP_1 \] \[ Q_1(t) = (1-t)P_1 + tP_2 \] 这里,\( Q_0(t) \) 和 \( Q_1(t) \) 分别表示从 \( P_0 \) 到 \( P_1 \) 和从 \( P_1 \) 到 \( P_2 \) 的线性插值结果[^4]。 2. **第二次线性插值** 对上述两条中间曲线再次进行线性插值,得到最终的二次贝塞尔曲线: \[ B(t) = (1-t)Q_0(t) + tQ_1(t) \] 将 \( Q_0(t) \) 和 \( Q_1(t) \) 的表达式代入: \[ B(t) = (1-t)((1-t)P_0 + tP_1) + t((1-t)P_1 + tP_2) \] 3. **展开并整理** 展开后得到: \[ B(t) = (1-t)^2P_0 + 2t(1-t)P_1 + t^2P_2 \] 这就是二次贝塞尔曲线的最终公式。 #### 示例代码实现 以下是基于上述公式的 Python 实现示例: ```python def quadratic_bezier(t, P0, P1, P2): """ 计算二次贝塞尔曲线上的点 :param t: 参数,取值范围为 [0, 1] :param P0: 起点坐标 (x, y) :param P1: 控制点坐标 (x, y) :param P2: 终点坐标 (x, y) :return: 曲线上对应 t 的点坐标 (x, y) """ x = (1 - t)**2 * P0[0] + 2 * t * (1 - t) * P1[0] + t**2 * P2[0] y = (1 - t)**2 * P0[1] + 2 * t * (1 - t) * P1[1] + t**2 * P2[1] return x, y # 示例 P0 = (0, 0) # 起点 P1 = (1, 2) # 控制点 P2 = (3, 0) # 终点 t = 0.5 # 参数 point = quadratic_bezier(t, P0, P1, P2) print(f"当 t={t} 时,曲线上对应的点为 {point}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值