开发者

How to divide the circle in equal parts?

开发者 https://www.devze.com 2022-12-23 17:06 出处:网络
i m the beginner in iphone. I want the divide the circle in equal parts. I have the code, #import \"MyView.h\"

i m the beginner in iphone. I want the divide the circle in equal parts. I have the code,

#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); 
    CGContextSetStrok开发者_运维技巧eColorWithColor(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
.

I want the above code divide the circle dynamically with out using c5,c6......c12 block, simply i want to using a loop in which i entering the number and dividing the circle on the basis of number.


You probably want to divide the circle up into a series of arcs and draw wedges.

Get the start and end points of the arcs along the circumference of the circle suing (x - h)^2 + (y - k)^2 = r^2. Then draw three lines: One each the start and end points from the center and then one arc segment from he start point to end point. (Use CGContextAddArc). Then fill in the path.

Once you have the points along the perimeter in an array, you can loop through them using the same loop for any arbitrary division.

Edit:

Here is an old cocoa example that shows the math involved.

Here's an iPhone pie chart example.

This thread has more links.

I think if you google "iPhone and Pie Chart" you should hit numerous examples for solving the same basic problem.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号