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

    貝塞爾曲線的繪制方法

     felwell 2019-05-23

             兩年前調試全向輪底盤的時候,曾經用到過貝塞爾曲線做路徑規劃。今天同學突然問起這個東西,回查了一下當時的代碼,覺得有必要寫個博客備忘一下。

             在數學的數值分析領域中,貝塞爾曲線是計算機圖形學中相當重要的參數曲線。更高維度的廣泛化貝濟埃曲線就稱作貝濟埃曲面,其中貝濟埃三角是一種特殊的實例。

             貝塞爾曲線于1962年,由法國工程師皮埃爾·貝濟埃(Pierre Bézier)所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由Paul de Casteljau于1959年運用de Casteljau算法開發,以穩定數值的方法求出貝塞爾曲線。

            接下來簡單介紹貝塞爾曲線的繪制方法。如下圖,假設給定了控制點P0,P1,P2。這里我們需要做輔助點Q0和Q1,使得:

    P0Q0:P0P1=P1Q1:P1P2=t,這里0≤t≤1。現在,我們可以簡單理解為三個控制點P0,P1,P2  “降維”  成了兩個控制點Q0,Q1。按照同樣的方法,再取輔助點B使得Q0B:Q0Q1=t,這里的 t 和上次 "降維"時的 t 是相等的。現在,我們已經降維成了只有一個點,那么這個點B就是該貝塞爾曲線中的一點

                               

            推廣一下,我們考慮多個控制點的情景。對于4、5、6。。。n個控制點,首先選定一個比例 t ,以此按比例降維直到只有一個點,這個點就是比例 t 時貝塞爾曲線上的點。當把 t 從0到1按照一定比例依次選取時,就能繪制出一個貝塞爾曲線。

                            

              六個控制點的情形:

                                                                   

    根據之前的描述,繪制貝塞爾曲線的過程可以用如下公式表述:

    式中,j是降了多少次維,i是第i個控制點。由于每降維一次,控制點就減少一個,所以i的取值范圍是(0,n-j)。

    C#程序如下:

    1. //==========================根據t獲取貝塞爾曲線上一個點===========================
    2. const int ControlPointNum = 10 ; //控制點數目
    3. Point[] ControlPoint = new Point[ControlPointNum]; //控制點
    4. Point[] WorkPoint = new Point[ControlPointNum]; //一塊用于存放臨時數據的空間
    5. /// <summary>
    6. /// 獲取本輪計算終點坐標
    7. /// </summary>
    8. /// <param name="t">貝塞爾曲線生成過程中的百分比</param>
    9. /// <param name="n">本層迭代控制點數目</param>
    10. /// <returns></returns>
    11. Point GetFinalPoint(double t, int n)
    12. {
    13. if (n == 1)
    14. {
    15. return WorkPoint[0];
    16. }
    17. else
    18. {
    19. //計算下一階的貝塞爾控制點
    20. for (int i = 0; i < n - 1; i++)
    21. {
    22. WorkPoint[i].X = (int)(WorkPoint[i].X * (1 - t) + WorkPoint[i + 1].X * t);
    23. WorkPoint[i].Y = (int)(WorkPoint[i].Y * (1 - t) + WorkPoint[i + 1].Y * t);
    24. }
    25. //進入下一層
    26. return GetFinalPoint(t, n - 1);
    27. }
    28. }
    29. //==========================根據t繪制曲線======================================
    30. for(int i=0;i<256;i++)
    31. {
    32. for (int j = 0; j < ControlPointNum; j++)//賦值控制點坐標至臨時工作空間
    33. {
    34. WorkPoint[j] = ControlPoint[j];
    35. }
    36. double t = (double)i/255.0;
    37. Point FinalPoint = GetFinalPoint(t,ControlPointNum);
    38. DrawPoint(FinalPoint); //調用繪圖函數
    39. }

     

    效果:

                                                            

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

      0條評論

      發表

      請遵守用戶 評論公約

      類似文章 更多

      主站蜘蛛池模板: 55大东北熟女啪啪嗷嗷叫| 精品日韩亚洲AV无码一区二区三区| 粗壮挺进邻居人妻| 亚洲国产一区二区A毛片| 国产精品成人午夜久久| 国产精品VA尤物在线观看| 又大又长粗又爽又黄少妇视频| 国产精品亚洲二区在线播放| 午夜福利试看120秒体验区| 天天夜碰日日摸日日澡| 丰满无码人妻热妇无码区| 国产L精品国产亚洲区久久| 桃花岛亚洲成在人线AV| 无码H黄肉3D动漫在线观看| 亚洲高清WWW色好看美女| 精品乱人伦一区二区三区 | 欧美大bbbb流白水| 亚洲中文字幕无码一区无广告 | 欧美亚洲另类 丝袜综合网| 亚洲高清国产拍精品青青草原| 日本一区二区三区专线| 超频97人妻在线视频| 青青草国产线观看| 国产天堂亚洲国产碰碰| 邻居少妇张开腿让我爽了一夜| 不卡一区二区国产精品| 日韩内射美女人妻一区二区三区| 亚洲 制服 丝袜 无码| 国产精品无码av不卡| 国产V亚洲V天堂无码久久久| 日本丰满大屁股少妇| 中文字幕国产日韩精品| 丁香色欲久久久久久综合网| 女高中生强奷系列在线播放 | 97成人碰碰久久人人超级碰oo| 日本丰满大屁股少妇| 国产精品国产三级国快看| 大香区一二三四区2021| 老色鬼永久精品网站| 国产啪视频免费观看视频| 国产高清自产拍av在线|