CoreGraphics--饼状图

本文介绍了一个使用Objective-C绘制饼状图的方法。通过遍历数组计算每个元素对应的扇区角度,并利用UIBezierPath创建对应的弧形路径,最终实现了一个简单的动态饼状图。文章还包含了颜色随机生成函数以及数据更新后的自动刷新机制。

 //传入数据,饼状图

    pieChartView.dataArr = @[@20,@50,@80,@70,@40];

- (void)drawRect:(CGRect)rect {

    // Drawing code

 

#if 0

    //贝塞尔路径

    

    UIBezierPath *path = [UIBezierPath bezierPathWithOvalInRect:CGRectMake(50, 50, 100, 100)];

    //Oval 椭圆

    //线条颜色

    [[UIColor redColor] setStroke];

    //线条宽度

    path.lineWidth = 5;

    

    //开始画

    [path stroke];

    

    //设置填充颜色

    [[UIColor yellowColor] set];

    //开始填充

    [path fill];

    

#endif

    

    

    //开始

    CGFloat startDegress = 0;

    //结束

    CGFloat endDegress = 0;

    

    

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

        //终点弧

        //计算数据每个元素的值所占的百分比

        endDegress += M_PI * 2 *([self.dataArr[i] floatValue]/[self sum]);

        // 路径

        UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(self.frame.size.width/2, self.frame.size.height/2) radius:MIN(self.frame.size.width, self.frame.size.height)/2 startAngle:startDegress endAngle:endDegress clockwise:YES];

 

        //更底层(这两句,相当于上面一句)

//        CGMutablePathRef path = CGPathCreateMutable();

//        CGPathAddArc(path, NULL,self.frame.size.width/2,self.frame.size.height/2, MIN(self.frame.size.width, self.frame.size.height)/2, startDegress, endDegress, YES);

        

        //重新修改开始的弧度

        //第二个弧的起点 ,是上一个弧的终点

        startDegress  = endDegress;

        

//注意:先画一个弧,然后终点-圆心 画一条线(以便能够填充,否则不能填充)

        //坐标为圆心

        [path addLineToPoint:CGPointMake(self.frame.size.width/2, self.frame.size.height/2)];

        

        

        //线条颜色

//        [[self randomColor] setStroke];

        //线条宽度

//        path.lineWidth = 5;

        //开始画

//        [path stroke];

        

        //设置填充颜色

        [[self randomColor] set];

        //开始填充

        [path fill];

 

        

    }

    

    

    

}

 

- (UIColor *)randomColor{

    

    return [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1];

}

 

 

- (void)setDataArr:(NSArray *)dataArr{

    

    _dataArr = dataArr;

    

    //调用drawRect刷新(再走一次上面)

    [self setNeedsDisplay];

    

}

 

//获取数组中总数

#pragma mark -- 计算数组中 数据的总和

- (CGFloat)sum{

    

   __block CGFloat sum = 0;

    [self.dataArr enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {

        sum = sum + [obj floatValue];

    }];

    

    return sum;

}

转载于:https://www.cnblogs.com/daxueshan/p/5816313.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值