欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

OpenGL畫bezier曲線

 更新時間:2020年04月20日 15:18:57   作者:Arururururu  
這篇文章主要為大家詳細(xì)介紹了OpenGL畫bezier曲線,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

Bezier Curve算法是根據(jù)參數(shù)曲線方程來得到光滑曲線的一種算法,曲線方程的參數(shù)由控制點決定。
其本質(zhì)是由調(diào)和函數(shù)根據(jù)控制點插值而成,其參數(shù)方程如下:

其中Pi(i=0,1,…,n)為控制點的向量,

Bi,n(t)為伯恩斯坦Bernstein基函數(shù),其多項式表示為:

線性Bezier Curve由兩個控制點決定:

二次Bezier Curve由三個控制點決定:

三次Bezier Curve由四個控制點決定:

如下圖,t = AE:AB = BF:BC = CG:CD = EH:EF = FI:FG = HJ:HI,J即為Bezier曲線上的點

 

t取0到1的過程就把bezier曲線畫出來了。

Bezier Curve的特點:

1、端點性質(zhì):通過起點和終點;
2、對稱性:保持頂點位置不變,順序顛倒,新曲線的形狀不變,只是參數(shù)變化的方向相反;
3、凸包性:由二項式定理得知Bi,n(t)求和為1,即Bi,n(t)構(gòu)成了Bezier曲線的一組權(quán)函數(shù),因此Bezier曲線一定落在其控制多邊形的凸包之中。
4、幾何不變性:Bezier曲線的形狀只與其控制點的相對位置有關(guān),與坐標(biāo)變化無關(guān)。

實現(xiàn)三次Bezier曲線函數(shù)的代碼如下:vector用于儲存構(gòu)成曲線的點坐標(biāo),若每次都重新分配會導(dǎo)致堆溢出,因此每次都用同一內(nèi)存空間

//用于存儲畫曲線的點坐標(biāo)
float* vector = new float[2000];
float* bezierCurve(float step, float* points) {
 //一共有幾個點
 int size = 1.0 / step;

 float t = 0.0f;
 //參考公式 Q(t)=(1-t)^3*P0 + 3t(1-t)^2*P1 + 3t^2(1-t)*P2 + t^3*P3
 for (int index = 0; index < size; index++, t += step) {
 vector[index * 3] = (1 - t)*(1 - t)*(1 - t)*points[0] + 3 * t*(1 - t)*(1 - t)*points[3]
    + 3 * t*t*(1 - t)*points[6] + t*t*t*points[9];
 vector[index * 3 + 1] = (1 - t)*(1 - t)*(1 - t)*points[1] + 3 * t*(1 - t)*(1 - t)*points[4]
    + 3 * t*t*(1 - t)*points[7] + t*t*t*points[10];
 vector[index * 3 + 2] = 0.0f;
 }

 return vector;
}

【部分運行效果】

用鼠標(biāo)左鍵點擊四個點,根據(jù)點的順序畫出三次Bezier曲線

改變點的順序,得到新的Bezier曲線

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言字符串與字符數(shù)組面試題中最易錯考點詳解

    C語言字符串與字符數(shù)組面試題中最易錯考點詳解

    這篇文章主要介紹了C語言字符串與字符數(shù)組面試題中最易錯考點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)吧
    2022-09-09
  • C++實現(xiàn)寵物商店信息管理系統(tǒng)

    C++實現(xiàn)寵物商店信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實現(xiàn)寵物商店信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++實現(xiàn)LeetCode(43.字符串相乘)

    C++實現(xiàn)LeetCode(43.字符串相乘)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(43.字符串相乘),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言中的內(nèi)存管理詳情

    C語言中的內(nèi)存管理詳情

    這篇文章主要介紹了C語言中的內(nèi)存管理詳情,手工申請內(nèi)存使用malloc展開全文內(nèi)容,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 《戰(zhàn)狼》中兩軍作戰(zhàn)入侵代碼竟然是輸出星期幾的!

    《戰(zhàn)狼》中兩軍作戰(zhàn)入侵代碼竟然是輸出星期幾的!

    這篇文章主要介紹了《戰(zhàn)狼》中兩軍作戰(zhàn)入侵代碼竟然是輸出星期幾的,喜歡戰(zhàn)狼和編程的同學(xué)可以了解下。
    2017-11-11
  • C語言實現(xiàn)linux網(wǎng)卡檢測改進版

    C語言實現(xiàn)linux網(wǎng)卡檢測改進版

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)linux網(wǎng)卡檢測的改進版,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C語言實現(xiàn)雙人五子棋游戲

    C語言實現(xiàn)雙人五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)雙人五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言FlappyBird飛揚的小鳥實現(xiàn)開發(fā)流程

    C語言FlappyBird飛揚的小鳥實現(xiàn)開發(fā)流程

    因為在家宅了好多天,隨手玩了下自己以前做的一些小游戲,說真的,有幾個游戲做的是真的劣質(zhì),譬如 flappybird 真的讓我難以忍受,于是重做了一波分享給大家
    2022-11-11
  • C/C++實現(xiàn)快速排序的方法

    C/C++實現(xiàn)快速排序的方法

    這篇文章主要介紹了C/C++實現(xiàn)快速排序的方法,這幾天在找工作,被問到快速排序,結(jié)果想不出來快速排序怎么弄的;回來搜索了一下,現(xiàn)在記錄下來,方便以后查看。
    2014-12-12
  • C++設(shè)計模式之簡單工廠模式實例

    C++設(shè)計模式之簡單工廠模式實例

    這篇文章主要介紹了C++設(shè)計模式之簡單工廠模式實例,工廠模式有一種非常形象的描述,建立對象的類就如一個工廠,而需要被建立的對象就是一個個產(chǎn)品,需要的朋友可以參考下
    2014-09-09

最新評論