代码之家  ›  专栏  ›  技术社区  ›  Tirth

如何将圆等分?

  •  2
  • Tirth  · 技术社区  · 14 年前

    #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 回复  |  直到 14 年前
        1
  •  2
  •   Community CDub    7 年前

    可能需要将圆分成一系列圆弧并绘制楔块。

    沿着圆的圆周(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和饼图”,你应该找到许多解决同一个基本问题的例子。