关闭

曲线平滑-B样条曲线

5617人阅读 评论(0) 收藏 举报
分类:

3D空间曲线三次B样条平滑示例:

struct D_DOT3D //D_DOT3D示例,未完全实现  
{  
    double x,y,z;  
} 

double GetThreeBSplineValue(double p0, double p1, double p2, double p3, double t)
{
	double A0 = (p0 + 4*p1 + p2) / 6;
	double A1 = - (p0 - p2)/2;
	double A2 = (p0 - 2*p1 + p2) / 2;
	double A3 = - (p0 - 3*p1 + 3*p2 - p3)/6;
	return A0 + A1 * t + A2 * t*t + A3 * t*t*t;
}

D_DOT3D GetThreeBSplineValue(D_DOT3D p0, D_DOT3D p1, D_DOT3D p2, D_DOT3D p3 , double t)
{
	D_DOT3D dot;
	dot.x = GetThreeBSplineValue(p0.x, p1.x, p2.x, p3.x, t);
	dot.y = GetThreeBSplineValue(p0.y, p1.y, p2.y, p3.y, t);
	dot.z = GetThreeBSplineValue(p0.z, p1.z, p2.z, p3.z, t);

	return dot;
}

long ThreeBSplineCurve( vector<D_DOT3D> &line )
{
	if (line.size()<4)
		return 0;

	vector<D_DOT3D> vout;
	for (int i=0; i<line.size()-3; ++i)
	{
		D_DOT3D p0(line[i]);
		D_DOT3D p1(line[i+1]);
		D_DOT3D p2(line[i+2]);
		D_DOT3D p3(line[i+3]);
		if(0 == i)
		{
			D_DOT3D dot1 = GetThreeBSplineValue(p0, p1, p2, p3, 0.0);
			vout.push_back(dot1);
		}

		D_DOT3D dot2 = GetThreeBSplineValue(p0, p1, p2, p3, 1/3.0);
		D_DOT3D dot3 = GetThreeBSplineValue(p0, p1, p2, p3, 2/3.0);
		D_DOT3D dot4 = GetThreeBSplineValue(p0, p1, p2, p3, 1.0);

		vout.push_back(dot2);
		vout.push_back(dot3);
		vout.push_back(dot4);
	}

	line = vout;

	return 1;
}


0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

B样条曲线

介绍                 1074年,Gordon和Riesenfeld用B样条基函数代替了Bernstein基函数,构造了B样条曲线。B样条曲线分段组成。每一段的参数t的区间为[0,1...
  • dreamcs
  • dreamcs
  • 2012-06-30 06:43
  • 41349

b-spline学习-系数计算及程序实践

内容 b-spline的学习网址 学习理解 现成的代码 动手翻译系数计算函数 用opencv图形验证效果 b-spline的学习网址对b-spline的介绍网址: http://www.qiujia...
  • brightming
  • brightming
  • 2016-12-31 15:19
  • 1260

Spline算法实现

参考资料 [1]求BSpline、BezierCurve、NURBSpline曲线的算法
  • Q1302182594
  • Q1302182594
  • 2016-01-21 16:45
  • 2933

计算机图形学的brizer曲线算法

  • 2008-11-12 23:18
  • 627B
  • 下载

OpenGL: 绘制B样条曲线

http://blog.csdn.net/yangtrees/article/details/9026411绘制B样条曲线:#include #include #pragma comment(l...
  • Augusdi
  • Augusdi
  • 2014-02-27 14:57
  • 12096

样条曲线概述

1 背景 参考资料 [1]计算机图形学(第三版),电子工业出版社 [2]计算方法(第2版),电子工业出版社
  • Q1302182594
  • Q1302182594
  • 2016-01-20 22:43
  • 3056

B-样条曲线教程(B-spline Curves Notes)目录

转载自:http://blog.csdn.net/tuqu/article/details/4749586   B-样条曲线教程 B-spline Curves Notes      本教程是...
  • changbaolong
  • changbaolong
  • 2012-03-22 18:43
  • 4760

如何绘制贝塞尔样条曲线和基数样条曲线[C#]

如何:绘制单个贝塞尔样条 https://msdn.microsoft.com/zh-cn/library/88ehxdxb%28v=vs.80%29.aspx?cs-save-lang=1&cs-...
  • cocoasprite
  • cocoasprite
  • 2015-11-06 20:00
  • 1365

3次B样条曲线

void B3_Line(CDC *pDC,CPoint p1,CPoint p2,CPoint p3,CPoint p4) { int x0=p1.x,y0=p1.y; int x1=p2...
  • a527606652
  • a527606652
  • 2013-06-24 13:35
  • 1589

C#实现赛贝尔等三种曲线的生成算法

  • 2014-01-19 23:57
  • 51KB
  • 下载
    个人资料
    • 访问:128592次
    • 积分:1797
    • 等级:
    • 排名:千里之外
    • 原创:43篇
    • 转载:57篇
    • 译文:0篇
    • 评论:10条
    最新评论