贝塞尔曲线于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 }