如何将圆圈分成相等的部分?

时间:2010-03-23 14:03:51

标签: iphone

我是iphone的初学者。我希望将圆除以相等的部分。我有代码,

#import "MyView.h"
#define PI 3.14159265358979323846
static inline float radians(double degrees) { return degrees * PI / 180; }
@implementation MyView
- (id)initWithFrame:(CGRect)frame {
    if (self = [super initWithFrame:frame]) {
        // Initialization code
    }
    return self;
}
- (void)drawRect:(CGRect)rect {

    // circle
    CGContextRef contextRef = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(contextRef, 0, 0, 255, 0.1);
    CGContextSetRGBStrokeColor(contextRef, 0, 0, 255, 0.5);
    // Draw a circle (filled)
    //CGContextFillEllipseInRect(contextRef, CGRectMake(100, 100, 150, 150));
    // Draw a circle (border only)
    CGContextStrokeEllipseInRect(contextRef, CGRectMake(100, 100, 150, 150));
    //cgr


    CGContextRef  c5= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c5, 2.0); 
    CGContextSetStrokeColorWithColor(c5, [UIColor brownColor].CGColor);
    CGContextBeginPath(c5);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c5, 175.0f, 175.0f);
    CGContextAddLineToPoint(c5, 100.0f, 175.0f);
    CGContextStrokePath(c5);

    CGContextRef  c6= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c6, 2.0); 
    CGContextSetStrokeColorWithColor(c6, [UIColor blueColor].CGColor);
    CGContextBeginPath(c6);
    CGContextMoveToPoint(c6, 175.0f, 175.0f);
    CGContextAddLineToPoint(c6, 175.0f, 250.0f);
    //CGContextAddLineToPoint(c6, 175.0f, 245.0f);
    CGContextStrokePath(c6);

    CGContextRef  c7= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c7, 02.0); 
    CGContextSetStrokeColorWithColor(c7, [UIColor greenColor].CGColor);
    CGContextBeginPath(c7);
    CGContextMoveToPoint(c7, 175.0f, 175.0f);
    CGContextAddLineToPoint(c7, 175.0f, 100.0f);
    CGContextStrokePath(c7);

    CGContextRef  c8= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c8, 2.0); 
    CGContextSetStrokeColorWithColor(c8, [UIColor redColor].CGColor);
    CGContextBeginPath(c8);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c8, 175.0f, 175.0f);
    CGContextAddLineToPoint(c8, 250.0f, 175.0f);
    CGContextStrokePath(c8);

    CGContextRef  c9= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c9, 2.0); 
    CGContextSetStrokeColorWithColor(c9, [UIColor purpleColor].CGColor);
    CGContextBeginPath(c9);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c9, 175.0f, 175.0f);
    CGContextAddLineToPoint(c9, 230.0f, 125.0f);
    CGContextStrokePath(c9);

    CGContextRef  c10= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c10, 2.0); 
    CGContextSetStrokeColorWithColor(c10, [UIColor orangeColor].CGColor);
    CGContextBeginPath(c10);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c10, 175.0f, 175.0f);
    CGContextAddLineToPoint(c10, 120.0f, 125.0f);
    CGContextStrokePath(c10);

    CGContextRef  c11= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c11, 2.0); 
    CGContextSetStrokeColorWithColor(c11, [UIColor magentaColor].CGColor);
    CGContextBeginPath(c11);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c11, 175.0f, 175.0f);
    CGContextAddLineToPoint(c11, 120.0f, 225.0f);
    CGContextStrokePath(c11);

    CGContextRef  c12= UIGraphicsGetCurrentContext();
    //CGFloat red4[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetLineWidth(c12, 2.0); 
    CGContextSetStrokeColorWithColor(c12, [UIColor yellowColor].CGColor);
    CGContextBeginPath(c12);
    //CGContextMoveToPoint(c5, 101.0f, 156.0f);
    CGContextMoveToPoint(c12, 175.0f, 175.0f);
    CGContextAddLineToPoint(c12, 231.0f, 226.0f);
    CGContextStrokePath(c12);


}

- (void)makeCircleAt:(CGPoint)center withDiameter:(float)diameter withColor:(int)myColor
{
    float radius = diameter * 0.5;
    CGRect myOval = {center.x - radius, center.y - radius, diameter, diameter};
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(context, 1.0, 0.0, 0.0, 1.0);
    CGContextAddEllipseInRect(context, myOval);
    CGContextFillPath(context);
}

- (void)dealloc {
    [super dealloc];
}
@end
.

我希望上面的代码动态地划分圆圈而不使用c5,c6 ...... c12块,我只想使用一个循环,其中我输入数字并根据数字划分圆圈。

1 个答案:

答案 0 :(得分:2)

您可能希望将圆圈分成一系列弧线并绘制楔形。

沿着圆的圆周获得弧的起点和终点(x-h)^ 2 +(y -k)^ 2 = r ^ 2。然后绘制三条线:一条从中心开始和结束点,然后从开始点到结束点一条弧段。 (使用CGContextAddArc)。然后填写路径。

一旦你有一个数组中的周边点,你可以使用相同的循环遍历它们进行任意划分。

编辑:

Here is an old cocoa example that shows the math involved

Here's an iPhone pie chart example.

This thread has more links.

我认为如果你谷歌“iPhone和饼图”,你应该找到许多解决相同基本问题的例子。