贝塞尔曲线原理及实现

 贝塞尔曲线于1962年,由法国工程师皮埃尔·贝塞尔(Pierre Bézier)所广泛发表,他运用贝塞尔曲线来为汽车的主体进行设计。贝塞尔曲线最初由 Paul de Casteljau 于1959年运用 de Casteljau 算法开发,以稳定数值的方法求出贝塞尔曲线。

1.线性贝塞尔曲线

P(t)=(1-t)P0+tP1 , 0<=t<=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+t3P ,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 }

posted @ 2017-11-14 14:09  三味线、  阅读(2361)  评论(0编辑  收藏  举报