分段连续三次Bezier 曲线控制点的构造算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
d12*t, 转 (1.6) ; P1R = P1 + P 012*d12*t , (1.5) 非共线时, 计算 P1L = P1 + (- P 012)*d 01*t ,
此方法也是借鉴了 Cardinal 样条的端点切向量的构造思路。 上述两种取法都能保持从 P 0, 通过 P1, 到达 P 2的走势, 都 是相对较好的取法, 但本处取角的平分线更能较好地保证在 线段转折处拟合曲线的左右对称, 使拟合曲线在线段转折处 具有最大程度的平滑, 模拟飞行时在拐弯处将会更平缓、 流畅。
P1、 P 2共线时, 当三点 P 0、 此时过 P1的任意直线方向来计算 P1L、 P1R都是可行的, P 2的两段拟 但如果选择不当, 通过点 P 0、
转 (1.6) ;
N k*3 + 2 + 1 = P1, N k*3 + 2 + 2 = P1R; (1.6) 置 N k*3 + 2 + 0 = P1L,
华北计算技术研究所, 北京 100083 North China Institute of Computer Technology, Beijing 100083, China E-mail: wang_jia_run@163.com WANG Jia-run, ZHAO Nan-song, HUA Wen-yuan, et al.Construction of cubic Bezier continuous subsection curve’ s control points.Computer Engineering and Applications, 2010, 46 (22) : 190-193. Abstract: The article describes detailed construction’ s algorithm of Bezier control points.It considers influence of flight route simulation and OpenSceneGraph (OSG) terrain data’ s loading into memory or unloading from memory.The vector tool is used in describing algorithm.At the end, the experimental result shows the whole curve’ s figure is good. Key words: Bezier cubic curve; control point; flight route simulation; vector; terrain data’ s loading into memory and unloading from memory 摘 要: 针对模拟飞行路线的实际需求, 考虑 OpenSceneGraph (OSG) 地形数据内存调度的影响, 利用向量工具, 对 Bezier 曲线的
190
2010, 46 (22)
Computer Engineering and Applications 计算机工程与应用
分段连续三次 Bezier 曲线控制点的构造算法
王家润, 赵南松, 华文元, 王玉玫 WANG Jia-run, ZHAO Nan-song, HUA Wen-yuan, WANG Yu-mei
P1R, 点 P1两侧在方向 P 012上取两点 P1L、 参看图 4。
P1 P 1R
输入点 {
P1 = Ci + 1, P 2 = Ci + 2; (0) 置 P 0 = C i, P1、 P 2, (1) 通过三点 P 0、 计算点 P1的左控制点 P1L和右控制点 P1R:
P 1L
(1.1) 计算向量 P 0 P1 、P1 P 2 , 并记d 01 = | P 0 P1 |, 并对向 d12 = | P1 P 2 |,
(2) 当k == 0时, 计算开始点的右控制点: 由 (1) 可知, 此时点 P1L已
P1、 P1L, 计算出, 点 P 0为开始点, 利用 P 0、 计算 P 0的右控制点 P 0R:
(2.1) 计算向量P11L = P1L - P1, 并记d11L = | P11L |, 并进行向量单位化;
P1、 P1L 是 否 共 线 , (2.2) 判 断 三 点 P0 、 如果共线转 (2.3) , 否则转
王家润, 赵南松, 华文元, 等: 分段连续三次 Bezier 曲线控制点的构造算法
t 为张力系数, β 为端点张力系数因 称为结束点, 取 0 < t < 0.5, ε为误差控制。 子, 取0 < β < 1.0, N 3n 。 称 点 集{N i i = 0 1, ... 3n}为 Bezier 控 制 点 集 。 在 图 2 N0, N1, N 3n - 1, 输出: 算法构造产生的控制点存储于: …,
线有影响, 从而可实现曲线局部的编辑修改。
C1 C3
C0 C2 C4
图1
N2 N1 C0=N0
控制点与插值点的关系示意图
N3=C1 N4 N8 N5 N6=C2 N9=C3 N10 N11
2 控制点构造 2.1 算法 (首尾非相连情况)
基本思路: 分段连续三次 Bezier 曲线要求: 每段需要 4 个 控制点, 曲线通过首尾两个控制点; 两段之间连接处要求保持
N 3、 N 4三点 控制点 N 2的位置 (需要相应计算 N 4的位置, 保持 N 2、 N1、 N 2、 N 3的拟合曲线与过控制 共线) , 可修改过控制点为 N 0、 N 4、 N5、 N 6的拟合曲线形状, 点为 N 3、 但不会对其他段的拟合曲
的功能: 用户先输入一些关键点, 制定一条飞行路线, 然后沿 路线进行模拟飞行。在此过程中, 有相应的地形数据调度 (OpenSceneGraph 中的地形调度通过辅助线程和 PagedLOD
1
引言
在与地形相关的软件中, 一般都要提供给用户模拟飞行
使用 Bezier 曲线进行拟合, 同时注意在两段的连接点与其两 侧的新插入的控制点保持三点共线, 参看图 1。文献 [2] 中给 出了插入控制点的基本过程, 本文则进一步给出了更加详细 的控制点的构造设计及几何说明。在图 2 中, 用户通过调整
for( k = 0; k n + 1 - 3; k + +)即从开始输入点遍历到倒数第三个
分, 强调向量时, 一般带有上划线, 强调点时, 无上划线; | P0 P1 |
为向量 P 0 P1 、P1 P 2 的夹角的平分线, 而ÐP 0 P1 P 2的平分线正 好与 P 012 垂直, 文献 [2] 中也使用了这一策略。根据 Bezier 曲 线分段C1连续要求, 需要保证 P1L、 在这里, 过 P1、 P1R三点共线,
C 0R C0 C1
2010, 46 (22)
191
CnL Cn C 0L CnR
N1、 N 2、 N 3, 中, 第一段 Bezier 曲线的控制点为 N 0、 第二段 Bezier N 4、 N5、 N 6, N1、 曲线的控制点为 N 3、 依此类推。其中, 在 4 点 N 0、 N 2、 N 3中, N 2是构造出的新控制点, N 3分别是输入 点 N1、 点 N 0、 C1。 的点C 0、
[1]
来实现) , 地形数据调度策略一般基于视点连续变化来设计, 如果视点方向变化剧烈, 很容易产生大规模新的地形数据内 存加载, 导致系统运行不流畅, 影响视觉效果。因此, 用户希 望看到飞行转弯时能平滑、 自然, 这就要求对飞行路线进行逼 近或插值, 尤其需要对路线线段的转折处进行光滑处理, 分段 三次 Overhauser 样条、 Bezier 样条等都能满足这类需求。选用 分段连续三次 Bezier 曲线, 对曲线的控制点进行设计, 构造出 合理的控制点集, 保证拟合曲线通过用户输入的所有关键点, 具有一定的光滑度, 而且, 用户通过生成的控制点, 可对曲线 进行一定程度的局部修改, 从而可进一步完成交互编辑功能。
控制点给出一种构造设计算法, 数值模拟实验显示了曲线的整体形状较好。 关键词: Bezier 曲线; 控制点; 飞行模拟路线; 向量; 地形数据内存调度 DOI: 10.3778/j.issn.1002-8331.2010.22.056 文章编号: 1002-8331 (2010) 22-0190-04 文献标识码: A 中图分类号: TP391.41
d12 ¹ 0, 量单位化, 其中 d 01 ¹ 0, 是由输入点集中的相邻两点不同来
保证; (1.2)计 算 向 量 P 0 P1 、P1 P 2 的 夹 角 平 分 线 向 量 , 记向量
P 012 = P 0 P1 + P1 P 2, 并对向量单位化; P1、 P 2是否共线 P1 P 2的叉 (1.3) 判断三点 P 0、 (通过计算向量 P 0 P1、
图3
闭合 Bezier 曲线首尾端点的连接示意图
2.2
2.2.1
算法的进一步说明
计算中间点的左、 右控制点时, 向量 P 012 的几何说明 平分线法: 向量 P 0 P1 、P1 P 2 已是单位向量, 所以 P 012 = P 0 P1 + P1 P 2
说明: 点的坐标为三维向量形式; 输入的相邻两点不能相 同; 输出的控制点集大小3n + 1; 算法中的点与向量不加严格区 表示向量 P 0 P1 的模; 输入点集的大小一般要求³ 3。 算法过程描述:
合曲线整体形状会形成较大的 “波浪” , 参看图 5, 考虑到模拟 飞行沿直线的实际情况, 在这里选取
P1L = P1 + (- P1 P 2)*d 01*t, P1R = P1 + P1 P 2*d12*t
P0 P1 P2Leabharlann Baidu
(2.4) ; (2.3) 共线时, 计算点 P 0R = P 0 + (- P11L)*d11L, 转 (2.5) ; (2.4) 不共线时, 计算向量 P 01L = P1L - P 0, 并进行向量单位化。计 算点 P 0R = P 0 + P 01L*d 01*t*β, 转 (2.5) ;
作者简介: 王家润 (1968-) , 男, 高级工程师, 主要研究方向: 三维可视化技术; 赵南松 (1974-) , 男, 工程师, 主要研究方向: 二维图形设计与开发; 华 文元 (1963-) , 男, 高级工程师, 主要研究方向: 三维可视化技术; 王玉玫 (1962-) , 女, 研究员, 硕士生导师, 主要研究领域为指挥自动化。 收稿日期: 2009-04-08 修回日期: 2009-07-15
C1连续, 本文中仅使用C1连续。针对上述要求, 算法在每两个
N7
N12=C4
图2
曲线局部编辑示意图
相邻输入点之间再插入两个控制点, 组成 4 个控制点, 对该段
n - 1。称点集{C i i = 0 1,... n}为输入点集。C 0称为开始点, Cn
n + 1个 点 C 0 , C1, C n - 1, Cn , Ci ¹ Ci + 1 i = 0 1 ... 输入: …,
N k*3 + 1 = P 0R; (2.5) 置 N k*3 + 0 = P 0 ,
图5
三点共线时中间点的控制点的不同方向选取
(3) 当 k == n + 1 - 3时, 计算结束点的左控制点: 由 (1) 可知, 此时
P1、 P1R, 点 P1R已计算出, 点 P 2为结束点, 利用点 P 2、 计算点 P 2的左控制
这样可保证在 P1附近的两侧拟合曲线更接近直线, 参看 图 6。
P0
P2
图4
平分线法构造左右控制点
平行线法:
P1R , 过点 P1两侧在 P 0 P 2 的平行线方向上, 取这两点 P1L、
积, 此时叉积的模正好是夹角的正弦, 当此值小于 ε时, 判定为共线) , 如果共线转 (1.4) , 否则转 (1.5) ; (1.4)共 线 时 , 计 算 点 P1L = P1 + (- P1 P 2)*d 01*t ,P1R = P1 + P1 P 2*
相关文档
最新文档