iOS之Quartz2D繪圖隨機繪製五角星

來源:互聯網
上載者:User

標籤:

1.   單個五角星繪製

上次講了在IOS中使用quartz2d繪製基本的圖形,今天來繪製一個比較複雜的圖形—五角星,五角星大家都很熟悉。

先來分析下五角星的畫法,一個五角星。

1.   先把一個圓周平均五等分,那麼每個角度是360/5,然後隔點進行連線就可以繪製五角星

2.   每個連線的夾角就是360/5*2,但是在IOS的正弦餘弦計算採用的是弧度制。這裡有必要複習下弧度的知識,弧度就是弧的長度,把等於半徑的弧度定義為一弧度。那麼360度就是2pi. 

3.   複習完弧度知識,我們就可以繪製五角星了

繪製代碼和

-(void) drawStar:(CGContextRef) context{

    [[UIColor redColor] set];

    

    //確定中心點

    CGPoint centerPoint=CGPointMake(160, 230);

    //確定半徑

    CGFloat radius=100.0;

    //五角星到頂點

    CGPoint p1=CGPointMake(centerPoint.x, centerPoint.y-radius);

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

    //五角星每個點之間點夾角,採用弧度計算。沒兩個點進行連線就可以畫出五角星

    //點與點之間點夾角為2*M_PI/5.0,

    CGFloat angle=4*M_PI/5.0;

    for (int i=1; i<=5; i++) {

        CGFloat x=centerPoint.x-sinf(i*angle)*radius;

        CGFloat y=centerPoint.y-cosf(i*angle)*radius;

        CGContextAddLineToPoint(context, x, y);

    }

    CGContextDrawPath(context, kCGPathFillStroke);

}

2.   多個五角星隨機繪製

1.API介紹

CGContextSaveGState(context);儲存上下文

CGContextRestoreGState(context);回複上下文

CGContextTranslateCTM(context, x, y);畫布移動

CGContextRotateCTM(context, angle);畫布旋轉

CGContextScaleCTM(context, scale, scale);畫布縮放

2.運行效果

-(void) drawMultiStar:(CGContextRef) context starCount:(int) count{

    //確定中心點

    CGPoint centerPoint=CGPointMake(0, 0);

    //確定半徑

    CGFloat radius=100.0;

    //五角星五點數組

    CGPoint points[5];

    points[0]=CGPointMake(centerPoint.x,centerPoint.y-radius);

    //五角星每個點之間點夾角,採用弧度計算。沒兩個點進行連線就可以畫出五角星

    //點與點之間點夾角為2*M_PI/5.0,

    CGFloat angle=4*M_PI/5.0;

    for (int i=1; i<5; i++) {

        CGFloat x=centerPoint.x-sinf(i*angle)*radius;

        CGFloat y=centerPoint.y-cosf(i*angle)*radius;

        points[i]=CGPointMake(x, y);

    }

    

    for (int i=0; i<count; i++) {

        //儲存上下文

        CGContextSaveGState(context);

        int randomX=arc4random_uniform(320);

        int randomY=arc4random_uniform(480);

        //隨機移動畫布位置

        CGContextTranslateCTM(context, randomX,randomY);

        //隨機旋轉畫布

        CGFloat roate=arc4random_uniform(90)*M_PI/180.0;

        CGContextRotateCTM(context, roate);

        //隨機縮放畫布

        float scale=arc4random_uniform(5)/10.0+0.2;

        CGContextScaleCTM(context, scale, scale);

        [[self randomColor] set];

        CGContextMoveToPoint(context, points[0].x,points[0].y);

        for (int i=1; i<5; i++) {

           CGContextAddLineToPoint(context, points[i].x,points[i].y);

        }

        CGContextDrawPath(context, kCGPathFillStroke);

        //回複上下文

        CGContextRestoreGState(context);

    }

 }

iOS之Quartz2D繪圖隨機繪製五角星

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.