贝塞尔曲线

   相信知道贝塞尔曲线的,都已经接触了Qqartz2D,对自定义图形有了一些了解。再我们平时工作中,有一些需求,是那些有规律的图形所不能满足的,比如,我想要一条曲线,用画圆的方式,一点点拼出来,也是可以的,但是比较麻烦,还不一定画的自然。再这里就想到了贝塞尔曲线。

   首先,我们要了解下什么是贝塞尔曲线?要了解贝塞尔曲线,要先有一个概念,贝塞尔曲线也是一种有规律的曲线,但这种规律是相对的,这里不多解释,逻辑较复杂,有兴趣的,可以去研究下《相对论》。

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

  在iOS中,贝塞尔曲线,运用起来,比较简单,方便,理解起来也较容易些。以二次贝塞尔曲线为例:二次贝塞尔曲线,需要三个点,以第一个为起点,链接第二点,然后第二个点链接第三个点,作两条直线(依次类推,三次贝塞尔曲线,需要四个点,作三条直线),然后画一条无限曲进的曲线。其实贝塞尔曲线自己在绘画过程中,比较复杂,在计算机中,可以以上述方式理解。

   二次贝塞尔曲线的创建方式:

//此为继承与UIView的对象的专有的画图方法    

- (void)drawRect:(CGRect)rect {

    //获取上下文

    CGContextRef context = UIGraphicsGetCurrentContext();

//设置画笔画出的线条的宽度

    CGContextSetLineWidth(context, 3);

    CGPoint p1 = CGPointMake(100, 100);

    CGPoint p3 = CGPointMake(130, 50);

    CGPoint p2 = CGPointMake(200, 80);

//移动画笔到某一点    

    CGContextMoveToPoint(context, p1.x, p1.y);

    

    //绘制贝塞尔曲线

    CGContextAddQuadCurveToPoint(context, p3.x, p3.y, p2.x, p2.y);

    //绘制图形

    CGContextStrokePath(context);

 }

   以上面代码为例,p1为起点,第一条线,p1到p3,第二条线,p3到p2。可以尝试下代码,看画出来的曲线是什么样的把,改一下点的坐标,多尝试几次,你就明白了。

原文地址:https://www.cnblogs.com/zxh-iOS/p/4774668.html