资源简介
该文档中包含了二次、三次B样条曲线的实现方法,可以进行整合调用
代码片段和文件信息
//**************************** BSpline.cpp ***********************************
// 包含功能:二次B样条平滑,三次B样条平滑;二次B样条平滑后节点插值
//
// 作者: 蒋锦朋 1034378054@qq.com
// 单位: 中国地质大学(武汉) 地球物理与空间信息学院
// 日期: 2014/12/03
//*************************************************************************************
#include “StdAfx.h“
#include “BSpline.h“
CBSpline::CBSpline(void)
{
}
CBSpline::~CBSpline(void)
{
}
//================================================================
// 函数功能: 二次B样条平滑
// 输入参数: *pt :给定点序列
// Num:点个数
// 返回值: 无返回值
// 编辑日期: 2014/12/03
//================================================================
void CBSpline::TwoOrderBSpline(CPosition *ptint Num)
{
CPosition *temp=new CPosition[Num];
for(int i=0;i temp[i]=pt[i];
temp[0].x=2*temp[0].x-temp[1].x; // 将折线两端点换成延长线上两点
temp[0].y=2*temp[0].y-temp[1].y;
temp[Num-1].x=2*temp[Num-1].x-temp[Num-2].x;
temp[Num-1].y=2*temp[Num-1].y-temp[Num-2].y;
CPosition NodePt1NodePt2NodePt3;
double t;
for(int i=0;i {
NodePt1=temp[i]; NodePt2=temp[i+1]; NodePt3=temp[i+2];
if(i==0) // 第一段取t=0和t=0.5点
{
t=0;
pt[i].x=F02(t)*NodePt1.x+F12(t)*NodePt2.x+F22(t)*NodePt3.x;
pt[i].y=F02(t)*NodePt1.y+F12(t)*NodePt2.y+F22(t)*NodePt3.y;
t=0.5;
pt[i+1].x=F02(t)*NodePt1.x+F12(t)*NodePt2.x+F22(t)*NodePt3.x;
pt[i+1].y=F02(t)*NodePt1.y+F12(t)*NodePt2.y+F22(t)*NodePt3.y;
}else if(i==Num-3) // 最后一段取t=0.5和t=1点
{
t=0.5;
pt[i+1].x=F02(t)*NodePt1.x+F12(t)*NodePt2.x+F22(t)*NodePt3.x;
pt[i+1].y=F02(t)*NodePt1.y+F12(t)*NodePt2.y+F22(t)*NodePt3.y;
t=1;
pt[i+2].x=F02(t)*NodePt1.x+F12(t)*NodePt2.x+F22(t)*NodePt3.x;
pt[i+2].y=F02(t)*NodePt1.y+F12(t)*NodePt2.y+F22(t)*NodePt3.y;
}else // 中间段取t=0.5点
{
t=0.5;
pt[i+1].x=F02(t)*NodePt1.x+F12(t)*NodePt2.x+F22(t)*NodePt3.x;
pt[i+1].y=F02(t)*NodePt1.y+F12(t)*NodePt2.y+F22(t)*NodePt3.y;
}
}
delete []temp;
}
//================================================================
// 函数功能: 二次B样条平滑在节点之间均匀插入指定个数点
// 输入参数: *pt :给定点序列
// Num:节点点个数
// *InsertNum: 节点之间需要插入的点个数指针
// 返回值: 无返回值
//
// 编辑日期: 2014/12/07
//=================================================================
void CBSpline::TwoOrderBSplineInterpolatePt(CPosition *&ptint &Numint *InsertNum)
{
if(pt==NULL || InsertNum==NULL) return;
int InsertNumSum=0; // 计算需要插入的点总数
for(int i=0;i
CPosition *temp=new CPosition[Num]; // 二次B样条不需要增加点数,需要将首尾点替换掉
for(int i=0;i temp[i]=pt[i];
temp[0].x=2*temp[0].x-temp[1].x; // 将折线两端点换成延长线上两点
temp[0].y=2*temp[0].y-temp[1].y;
temp[Num-1].x=2*temp[Num-1].x-temp[Num-2].x;
temp[Num-1].y=2*temp[Num-1].y-temp[Num-2].y;
delete [
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 8506 2014-12-07 21:39 B样条曲线\BSpline.cpp
文件 453 2014-12-07 21:40 B样条曲线\BSpline.h
文件 178176 2014-12-02 15:51 B样条曲线\b样条曲线.ppt
文件 931 2014-09-27 08:28 B样条曲线\position.h
文件 162 2016-09-20 15:56 B样条曲线\~$调用.docx
文件 1473536 2014-12-04 16:39 B样条曲线\离散点拟合曲线_Bezier_B样条.ppt
文件 19788 2014-12-07 21:49 B样条曲线\调用.docx
目录 0 2016-11-15 18:44 B样条曲线\
- 上一篇:was应用服务器项目部署
- 下一篇:SM4 Verilog
相关资源
- B样条曲面代码
- Bezier曲面 Coons曲面 B样条曲面绘制(用
- 绘制Bezier曲面和B样条曲面
- 基于opencv的b样条实现
- 计算机辅助几何设计与非均匀有理B样
- 计算机图形学:B样条曲线生成算法
- 施法中_《计算机辅助几何设计与非均
- (转)B样条曲线反求控制点
- B样条的生成原理及实现
- 三次B样条曲线
- 《计算机辅助几何设计与非均匀有理
- B样条反求控制点绘制曲线
- 非均匀有理B样条.皮尔
- B样条曲线演示程序
- 三次四阶b样条插值算法Deboor算法)
- 北航B样条曲面程序计算机辅助几何设
- 机械臂关节空间 B 样条曲线轨迹规划
- 图形学Bezier曲线和B样条曲面
- b样条曲线、曲面绘制软件
- B样条曲线反求输出点列.rar
- B样条曲面源码
- 三次均匀B样条在工业机器人轨迹规划
- 计算机图形学源码DDA直线、中点直线
- B样条实现代码
- 基于OpenGL的B样条曲线曲面的绘制
- OpenGL的B样条、贝塞尔曲线和贝塞尔曲
- 机器人关节空间B样条轨迹优化设计
- 基于遗传算法B样条曲线优化在机器人
- 5次B样条曲线.rar
- B样条的实现
评论
共有 条评论