Chaikin細分曲線

2021-07-11 13:13:52 字數 1812 閱讀 3071

繼續初步學習細分曲線曲面階段,先是細分曲線,首先接觸的是chaikin細分,其計算規則非常簡單,就是乙個割角過程,其最終收斂到2次b樣條曲線

索性我做了點為了以後工作方便的事情。改寫了一下之前的2次b樣條曲線

#include#include #include #include glfloat ctrlpoints[4][2] =

, , ,

};void mydisplay(void)

glcolor3f(0.0, 0.0, 1.0);

glbegin(gl_line_strip);

for (int i = 0; i < 4; i++)

glend();

glfloat ps1[11][2];

glfloat ps2[11][2];

glint i = 0;

for (double t = 0.0; t <= 1.0; t += 0.1)

glcolor3f(1.0, 1.0, 0.0);

glbegin(gl_line_strip);

for (int i = 0; i < 11; i++)

glend();

glbegin(gl_line_strip);

for (int i = 0; i < 11; i++)

glend();

glflush();

}int main(int argc, char *argv)

然後是現在的chaikin細分

#include#include #include #include #define n 4

glfloat ctrlpoints[4][2] =

, , ,

};void mydisplay(void)

glcolor3f(0.0, 0.0, 1.0);

glbegin(gl_line_strip);

for (int i = 0; i < 4; i++)

glend();

int n1 = n;//表示之前的頂點數

int n = 2 * (n - 2) + 2;//表示細分一次的頂點數

glfloat ps2[4][30][2];

for (int i = 0; i < 4; i++)

for (int i = 0; i < 3; i++)

if (i==0)

glcolor3f(1.0, 0.0, 1.0);

else

else glcolor3f(0.5, 0.8, 0.8);

} glbegin(gl_line_strip);

for (int w = 0; w < n; w++)

glend();

n1 = n;

n = 2 * (n - 2) + 2;

} glflush();

}int main(int argc, char *argv)

效果如下

附上和上次2次b樣條的對比

chaikin細分和2次b樣條

chaikin細分

2次b樣條

我這裡專門沒畫出來第乙個點和最後乙個點,為的就是看得出來和2次b樣條的對比,經過對比發現還是一樣的,之後進入曲面細分部分

網格細分 Loop細分演算法

網格細分有很多種方式,其中loop subdivision是一種三角網格細分方法 只能用在三角形面上 loop細分的基本思想就是把乙個三角形分成四個三角形,區分新頂點和老頂點分別進行位置的改變,最終讓模型表面變得更加光滑 對於loop細分其實就是兩步 先細分,再調整 非邊界更新策略 對於非邊界情況 ...

ROC曲線 PR曲線

在 的結果分析中,roc和pr曲線是經常用到的兩個有力的展示圖。1.roc曲線 roc曲線 receiver operating characteristic 是一種對於靈敏度進行描述的功能影象。roc曲線可以通過描述真陽性率 tpr 和假陽性率 fpr 來實現。由於是通過比較兩個操作特徵 tpr和...

客戶細分總結

隨著營銷方式的多變 客戶需求各異 營銷增長受阻等多方面影響,企業的營銷面臨前所未有的挑戰和機遇,精準化營銷似乎已成為很多公司的選擇,本文針對以下客戶細分 五大模組 進行總結 一 客戶細分的必要性 顧客是天生就存在很大差異的,同質化的營銷策略在不同的客戶面前起到的作用是不同,如果企業想最大化的實現可持...