久久精品精选,精品九九视频,www久久只有这里有精品,亚洲熟女乱色综合一区
    分享

    Bezier貝塞爾曲線的原理、二次貝塞爾曲線的實現

     felwell 2019-05-23

    Bezier曲線的原理

    Bezier曲線是應用于二維圖形的曲線。曲線由頂點和控制點組成,通過改變控制點坐標可以改變曲線的形狀。

    一次Bezier曲線公式:

    一次Bezier曲線是由P0至P1的連續點,描述的一條線段

    二次Bezier曲線公式:

    二次Bezier曲線是 P0至P1 的連續點Q0和P1至P2 的連續點Q1 組成的線段上的連續點B(t),描述一條拋物線。

    三次Bezier曲線公式:

    二次Bezier曲線的實現

    復制代碼
    #include <vector>class CBezierCurve
    {public:
        CBezierCurve();~CBezierCurve();void SetCtrlPoint(POINT& stPt);bool CreateCurve();void Draw(CDC* pDC);    
    private:// 主要算法,計算曲線各個點坐標void CalCurvePoint(float t, POINT& stPt);private:// 頂點和控制點數組std::vector<POINT> m_vecCtrlPt;// 曲線上各點坐標數組std::vector<POINT> m_vecCurvePt;        
    };
    復制代碼
    復制代碼
        #include <math.h>  
        #include "BezierCurve.h"  
          
        CBezierCurve::CBezierCurve()  
        {  
        }  
          
        CBezierCurve::~CBezierCurve()  
        {  
        }  
          void CBezierCurve::SetCtrlPoint(POINT& stPt)  
        {  
            m_vecCtrlPt.push_back(stPt);  
        }  
          void CBezierCurve::CreateCurve()  
        {  // 確保是二次曲線,2個頂點一個控制點  assert(m_vecCtrlPt.size() == 3);  
          // t的增量, 可以通過setp大小確定需要保存的曲線上點的個數  float step = 0.01;  for (float t = 0.0; t <= 1.0; t += step)  
            {  
                POINT stPt;  
                CalCurvePoint(t, stPt);  
                m_vecCurvePt.push_back(stPt);  
            }  
        }  
          void CBezierCurve::Draw(CDC* pDC)  
        {     // 畫出曲線上個點,若不連續可以用直線連接各點  int nCount = m_vecCurvePt.size();  for (int i = 0; i < nCount; ++i)  
            {  
                pDC->SetPixel(m_vecCurvePt[i], 0x000000);  
            }  
        }  
          void CBezierCurve::CalCurvePoint(float t, POINT& stPt)  
        {  // 確保是二次曲線,2個頂點一個控制點  assert(m_vecCtrlPt.size() == 3);  
          // 計算曲線點坐標,此為2次算法,改變此處可以實現多次曲線  float x = (float)m_vecCtrlPt[0].x * pow(1 - t, 2)   +   
                      (float)m_vecCtrlPt[1].x * t * (1 - t) * 2 +   
                      (float)m_vecCtrlPt[2].x * pow(t, 2);  float y = (float)m_vecCtrlPt[0].y * pow(1 - t, 2)   +   
                      (float)m_vecCtrlPt[1].y * t * (1 - t) * 2 +   
                      (float)m_vecCtrlPt[2].y * pow(t, 2);  
            stPt.x =x;  
            stPt.y= y;  
        }
    復制代碼

      本站是提供個人知識管理的網絡存儲空間,所有內容均由用戶發布,不代表本站觀點。請注意甄別內容中的聯系方式、誘導購買等信息,謹防詐騙。如發現有害或侵權內容,請點擊一鍵舉報。
      轉藏 分享 獻花(0

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 男人的天堂av社区在线| 亚洲中文久久久精品无码| 国产AV无区亚洲AV麻豆| 日韩亚洲精品中文字幕| 一个人免费观看WWW在线视频| 国产一区二区三区不卡AV| 亚洲人成小说网站色在线| 欧美老熟妇XB水多毛多| 午夜DY888国产精品影院| 国产欧美久久一区二区三区| 中文字幕国产精品资源| 国产青榴视频在线观看| 日韩精品国产中文字幕| 国精品无码一区二区三区在线蜜臀| 亚洲欧美综合中文| 国产精品 视频一区 二区三区| 亚洲V天堂V手机在线| 老司机亚洲精品影院| 九九在线精品国产| 亚洲AV无码一区二区三区性色 | 国产精品午夜福利资源| 欧洲卡一卡二卡三爱区| 人妻中文字幕精品系列| 无码国产精品一区二区免费模式 | 成人看的污污超级黄网站免费| 人人爽人人片人人片AV| 高清破外女出血AV毛片| 亚洲中文字幕国产综合| 亚洲最大成人网色| 日韩V欧美V中文在线| 又大又硬又爽18禁免费看| 无码人妻一区二区三区四区AV| 欧美成本人视频免费播放| 成午夜精品一区二区三区| 国产午夜无码视频在线观看| 亚洲人成网网址在线看| 中国女人高潮hd| 人人爽人人片人人片AV| 久久综合狠狠综合久久| 成人啪精品视频网站午夜| 国产999精品2卡3卡4卡|