// 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...