繪製貝塞爾Bezier曲線

2021-06-05 09:58:59 字數 1520 閱讀 1608

// trainingtools.cpp : 定義控制台應用程式的入口點。

//#include #include #include #include #include #include using namespace std;

const int ww_max_mark_count = 40; //最大40個控制點

int mark_count =4;

int conner_pt_index =-1;

cvpoint3d32f control_pts[ww_max_mark_count];

iplimage *image = 0 ; //原始影象

bool is_showcontrollines = true;

// 兩個向量相加,p=p+q

cvpoint3d32f pointadd(cvpoint3d32f p, cvpoint3d32f q)

// 向量和標量相乘p=c*p

cvpoint3d32f pointtimes(float c, cvpoint3d32f p)

// 計算貝塞爾方程的值

// 變數u的範圍在0-1之間

//p1*t^3 + p2*3*t^2*(1-t) + p3*3*t*(1-t)^2 + p4*(1-t)^3 = pnew

cvpoint3d32f bernstein(float u, cvpoint3d32f *p)

//畫控制線

void drawcontrolline(cvpoint3d32f *p)

cvline(image,pc[0],pc[1],cv_rgb(0,0,255),1,cv_aa,0);

cvline(image,pc[2],pc[3],cv_rgb(0,0,255),1,cv_aa,0);

}//得到最近control_pts的index

int getnearpointindex(cvpoint mouse_pt)}}

} else if ( event == cv_event_mousemove ) //修改控制點座標

}};int main(int argc, char* argv)

//畫控制線

if(is_showcontrollines)drawcontrolline(pcontrols);

pcontrols+=3;

}cvshowimage("win",image);

int keycode = cvwaitkey(20);

if (keycode==27) break;

if(keycode=='w'||keycode=='w') divs+=2;

if(keycode=='s'||keycode=='s') divs-=2;

if(keycode=='z'||keycode=='z') is_showcontrollines = is_showcontrollines^1;

//cout<<"precision : "<}

return 0;

}

OPENGL繪製貝塞爾曲線

最終效果圖 通過3個點形成一條貝塞爾曲線 1.滑鼠問題 在使用滑鼠獲取座標的時候,要知道滑鼠獲取的座標和螢幕座標是不同的 opengl使用右手座標 從左到右,x遞增 從下到上,y遞增 從遠到近,z遞增 而滑鼠是從左到右增x,同時從上到下也是增y 所以在求 y 的時候,用 螢幕大小 y 來獲取 2.繪...

繪製貝塞爾曲線通用方法

計算三次貝塞爾曲線,後面n n 3 計算時,都是將點分成一組一組的三次貝塞爾曲線 skpoint calcthreebezier wm5 vector2d ptw1,wm5 vector2d ptw2,wm5 vector2d ptw3 繪製貝塞爾曲線函式 void drawbezier vecto...

繪製漸變的貝塞爾曲線

前面介紹了使用qt中的api繪製貝塞爾曲線,使用qt的api繪製貝塞爾曲線可參見繪製貝塞爾曲線,本章介紹一下使用線段連線的方式繪製一條漸變的貝塞爾曲線。效果如下圖所示 二階貝塞爾曲線的公式如下 b t p 0 1 t 3 3p1t 1 t 2 3 p2t2 1 t p3 t3,t 0,1 b t p...