• 曲线平滑-B样条曲线 【转】


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

    1. struct D_DOT3D //D_DOT3D示例,未完全实现    
    2. {    
    3.     double x,y,z;    
    4. }   
    5.   
    6. double GetThreeBSplineValue(double p0, double p1, double p2, double p3, double t)  
    7. {  
    8.     double A0 = (p0 + 4*p1 + p2) / 6;  
    9.     double A1 = - (p0 - p2)/2;  
    10.     double A2 = (p0 - 2*p1 + p2) / 2;  
    11.     double A3 = - (p0 - 3*p1 + 3*p2 - p3)/6;  
    12.     return A0 + A1 * t + A2 * t*t + A3 * t*t*t;  
    13. }  
    14.   
    15. D_DOT3D GetThreeBSplineValue(D_DOT3D p0, D_DOT3D p1, D_DOT3D p2, D_DOT3D p3 , double t)  
    16. {  
    17.     D_DOT3D dot;  
    18.     dot.x = GetThreeBSplineValue(p0.x, p1.x, p2.x, p3.x, t);  
    19.     dot.y = GetThreeBSplineValue(p0.y, p1.y, p2.y, p3.y, t);  
    20.     dot.z = GetThreeBSplineValue(p0.z, p1.z, p2.z, p3.z, t);  
    21.   
    22.     return dot;  
    23. }  
    24.   
    25. long ThreeBSplineCurve( vector<D_DOT3D> &line )  
    26. {  
    27.     if (line.size()<4)  
    28.         return 0;  
    29.   
    30.     vector<D_DOT3D> vout;  
    31.     for (int i=0; i<line.size()-3; ++i)  
    32.     {  
    33.         D_DOT3D p0(line[i]);  
    34.         D_DOT3D p1(line[i+1]);  
    35.         D_DOT3D p2(line[i+2]);  
    36.         D_DOT3D p3(line[i+3]);  
    37.         if(0 == i)  
    38.         {  
    39.             D_DOT3D dot1 = GetThreeBSplineValue(p0, p1, p2, p3, 0.0);  
    40.             vout.push_back(dot1);  
    41.         }  
    42.   
    43.         D_DOT3D dot2 = GetThreeBSplineValue(p0, p1, p2, p3, 1/3.0);  
    44.         D_DOT3D dot3 = GetThreeBSplineValue(p0, p1, p2, p3, 2/3.0);  
    45.         D_DOT3D dot4 = GetThreeBSplineValue(p0, p1, p2, p3, 1.0);  
    46.   
    47.         vout.push_back(dot2);  
    48.         vout.push_back(dot3);  
    49.         vout.push_back(dot4);  
    50.     }  
    51.   
    52.     line = vout;  
    53.   
    54.     return 1;  
  • 相关阅读:
    软件系统的稳定性
    项目从.net 2.0 升级到。.net 4.0项目以后发现网站运行十分缓慢
    学习英语小助手(阅读粘贴的英文,使用MVVM)
    如何在IIS6,7中部署ASP.NET网站
    基于 IOCP 的通用异步 Windows Socket TCP 高性能服务端组件的设计与实现
    面向对象软件设计原则—— 软件实体的设计原则
    Django实战
    聊聊豆瓣阅读kindle版
    多线程的基本概念
    nopCommerce的源代码结构和架构
  • 原文地址:https://www.cnblogs.com/mazhenyu/p/8309286.html
Copyright © 2020-2023  润新知