版权声明:本文为博主原创文章,未经博主允许不得转载。

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

  1. struct D_DOT3D //D_DOT3D示例,未完全实现
  2. {
  3. double x,y,z;
  4. }
  5. double GetThreeBSplineValue(double p0, double p1, double p2, double p3, double t)
  6. {
  7. double A0 = (p0 + 4*p1 + p2) / 6;
  8. double A1 = - (p0 - p2)/2;
  9. double A2 = (p0 - 2*p1 + p2) / 2;
  10. double A3 = - (p0 - 3*p1 + 3*p2 - p3)/6;
  11. return A0 + A1 * t + A2 * t*t + A3 * t*t*t;
  12. }
  13. D_DOT3D GetThreeBSplineValue(D_DOT3D p0, D_DOT3D p1, D_DOT3D p2, D_DOT3D p3 , double t)
  14. {
  15. D_DOT3D dot;
  16. dot.x = GetThreeBSplineValue(p0.x, p1.x, p2.x, p3.x, t);
  17. dot.y = GetThreeBSplineValue(p0.y, p1.y, p2.y, p3.y, t);
  18. dot.z = GetThreeBSplineValue(p0.z, p1.z, p2.z, p3.z, t);
  19. return dot;
  20. }
  21. long ThreeBSplineCurve( vector<D_DOT3D> &line )
  22. {
  23. if (line.size()<4)
  24. return 0;
  25. vector<D_DOT3D> vout;
  26. for (int i=0; i<line.size()-3; ++i)
  27. {
  28. D_DOT3D p0(line[i]);
  29. D_DOT3D p1(line[i+1]);
  30. D_DOT3D p2(line[i+2]);
  31. D_DOT3D p3(line[i+3]);
  32. if(0 == i)
  33. {
  34. D_DOT3D dot1 = GetThreeBSplineValue(p0, p1, p2, p3, 0.0);
  35. vout.push_back(dot1);
  36. }
  37. D_DOT3D dot2 = GetThreeBSplineValue(p0, p1, p2, p3, 1/3.0);
  38. D_DOT3D dot3 = GetThreeBSplineValue(p0, p1, p2, p3, 2/3.0);
  39. D_DOT3D dot4 = GetThreeBSplineValue(p0, p1, p2, p3, 1.0);
  40. vout.push_back(dot2);
  41. vout.push_back(dot3);
  42. vout.push_back(dot4);
  43. }
  44. line = vout;
  45. return 1;
  46. }

曲线平滑-B样条曲线 【转】的更多相关文章

  1. TeeChart曲线平滑 Line.Smoothed

    需要注意的是,在加载点之前,需要设置Smoothed属性为false 等点加载完成之后,再设置Smoothed属性为true, //如果直接设置Smoothed为true再去加载点的话,曲线就完全不显 ...

  2. PR曲线平滑

    两天写论文中,本来设计的是要画这个Precision-Recall Curve的,因为PRC是从信息检索中来的,而且我又做的类似一个检索,所以要画这个图,但是我靠,竟然发现不好画,找了很多资料等.最后 ...

  3. echarts 曲线平滑配置

    来源:https://blog.csdn.net/sinat_36422236/article/details/62430114 series : [ { name:'your name', symb ...

  4. python的曲线平滑工具,及python画一条线中包含不同粗细不同颜色的画线方法

    from scipy.signal import savgol_filter import matplotlib.pyplot as plt cc = savgol_filter(c, 99, 1) ...

  5. SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)

    以二次贝塞尔曲线的公式为例: js函数: //p0.p1.p2三个点,其中p0为起点,p2为终点,p1为控制点 //它们的坐标用数组表示[x,y] //t的范围是0-1 function qBerzi ...

  6. three.js 曲线

    上几篇说了three.js的曲线,这篇来郭先生来说说three.js曲线,在线案例点击郭先生的博客查看. 1. 了解three.js曲线 之前已经说了一些three.js的几何体,这篇说一说three ...

  7. 深度掌握SVG路径path的贝塞尔曲线指令

    一.数字.公式.函数.变量,哦,NO! 又又一次说起贝塞尔曲线(英语:Bézier curve,维基百科详尽中文释义戳这里),我最近在尝试实现复杂的矢量图形动画,发现对贝塞尔曲线的理解馒头那么厚,是完 ...

  8. svg 贝塞尔曲线图解(记录)

    path路径绘制中,绘制贝塞尔曲线的命令包括: Q 二次贝赛尔曲线 x1,y1 x,y T 平滑二次贝塞尔曲线 x,y C 曲线(curveto) x1,y1 x2,y2 x,y S 平滑曲线 x2, ...

  9. GDI+编程说明及小结

    原文地址:http://blog.csdn.net/byxdaz/article/details/5972759 GDI+(Graphics Device Interface Plus图形设备接口加) ...

随机推荐

  1. js获取单个查询串的值

    function getSearchString(key) { // 获取URL中?之后的字符 var searchArr= window.location.href.split('#')[0].sp ...

  2. js javascript 实现多线程

    在讲之前,大家都知道js是基于单线程的,而这个线程就是浏览器的js引擎. 首先来看一下大家用的浏览器都具有那些线程吧. 假如我们要执行一些耗时的操作,比如加载一张很大的图片,我们可能需要一个进度条来让 ...

  3. 有了这套flex页面布局方案,页面什么的,那都不是事。

    一.CSS3弹性盒子弹性盒子是CSS3的一种新布局模式.CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时确保元素拥有恰当的行为的布局 ...

  4. CodeForces - 831A Unimodal Array 模拟

    A. Unimodal Array time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  5. 不可不说的Java“锁”事

    前言 Java提供了种类丰富的锁,每种锁因其特性的不同,在适当的场景下能够展现出非常高的效率.本文旨在对锁相关源码(本文中的源码来自JDK 8).使用场景进行举例,为读者介绍主流锁的知识点,以及不同的 ...

  6. 微服务:如何优雅的使用Mybatis

    个人比较喜欢 jpa 这种极简的模式,但是为了项目保持统一性技术选型还是定了 mybatis.到网上找了一下关于 spring boot 和 mybatis 组合的相关资料,各种各样的形式都有,看的人 ...

  7. Replication Controller

    RC保证在同一时间能够运行指定数量的Pod副本,保证Pod总是可用.如果实际Pod数量比指定的多就结束掉多余的,如果实际数量比指定的少就启动缺少的. 当Pod失败.被删除或被终结时,RC会自动创建新的 ...

  8. 机器学习之路:python 特征降维 主成分分析 PCA

    主成分分析: 降低特征维度的方法. 不会抛弃某一列特征, 而是利用线性代数的计算,将某一维度特征投影到其他维度上去, 尽量小的损失被投影的维度特征 api使用: estimator = PCA(n_c ...

  9. 【枚举】AtCoder Regular Contest 095 C - Symmetric Grid

    题意:给你一个H*W的字符矩阵,一次操作可以任意将两行或者两列交换.问你是否能通过任意多次操作,使得其变为对称矩阵.对称的含义是:对于任何格子A(i,j),其都等于A(H-i+1,W-j+1). 显然 ...

  10. Java_基础知识回顾

    1.ByteArrayInputStream. ByteArrayOutputStream String str = "ZHANGSAN"; //System.out.printl ...