貝塞爾曲線於1962年,由法國工程師皮埃爾·貝塞爾(Pierre Bézier)所廣泛發表,他運用貝塞爾曲線來為汽車的主體進行設計。貝塞爾曲線最初由 Paul de Casteljau 於1959年運用 de Casteljau 算法開發,以穩定數值的方法求出貝塞爾曲線。
1.線性貝塞爾曲線
2.二次貝塞爾曲線
P(t)=(1-t)2P0+2t(1-t)P1+t2P2 ,0<=t<=1;
P0Q0:P0P1=P1Q1:P1P2=Q0B:Q0Q1
3.三次貝塞爾曲線
P(t)=(1-t)3P0+3t(1-t)2P1+3t2(1-t)P2+t3P3 ,0<=t<=1;
二次貝塞爾曲線的實現:
- 法一:由函數求出對應點,描點畫線;
- 法二:Qt cubicTo()畫線;
1 void MainWindow::paintEvent(QPaintEvent *) 2 { 3 QPainter painter(this); 4 painter.drawLine(100,100,100,200); 5 painter.drawLine(100,100,200,100); 6 QPointF p0(100,200); 7 QPointF p1(100,100); 8 QPointF p2(200,100); 9 QPointF d; 10 double i=0;//方法一 11 while(i<=1) 12 { 13 d=(1-i)*(1-i)*p0+2*i*(1-i)*p1+i*i*p2; 14 painter.drawPoint(d); 15 i+=0.01; 16 } 17 18 painter.drawLine(100,300,100,400); 19 painter.drawLine(100,400,200,400); 20 QPainterPath path;//方法二 21 path.moveTo(100,300); 22 path.cubicTo(100,400,100,400,200,400); 23 painter.drawPath(path); 24 }