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

帮助在iPhone中绘制圆

  •  1
  • Skawful  · 技术社区  · 14 年前

    下面是一段代码,我试图画一个圆,但我的x值打印为常量值。很可能是非常简单的事情。提前谢谢你的帮助。

    int sides = 100;
    int radius = 200;
    int centerX = 100;
    int centerY = 100;
    CGFloat red[4] = {1.0f, 0.0f, 0.0f, 1.0f};
    CGContextSetStrokeColor(context, red);
    CGContextBeginPath(context);
    
    
    CGContextMoveToPoint(context, 0, 0);
    int i = 0;
    for(i = 0; i <= sides; i++)
    {
    
        CGFloat pointRatio = i/sides;
        CGFloat xSteps = cos( pointRatio * 2 * M_PI);
        CGFloat ySteps = sin( pointRatio * 2 * M_PI );
        CGFloat pointX = centerX + xSteps * radius;
        CGFloat pointY = centerY + ySteps * radius;
        NSLog(@"%i", pointX);
    
        CGContextAddLineToPoint(context, pointX, pointY);
    }
    CGContextStrokePath(context);
    
    3 回复  |  直到 14 年前
        1
  •  8
  •   Vladimir    14 年前
    CGFloat pointRatio = i/sides;
    

    当你除以2个整数时,结果也是整数-0。必须确保执行浮点除法:

    CGFloat pointRatio = 1.0f*i/sides;
    // Or even better
    CGFloat pointRatio = i/(CGFloat)sides;
    

    CGPathAddEllipseInRect(path, NULL, 
               CGRectMake(centerX - radius, centerY - radius, 2*radius, 2*radius));
    
        2
  •  5
  •   Aziz Shaikh    13 年前

    CGContextAddArc(contextRef,centerX,centerY,radius,0,2*3.1415926535898,1);
    CGContextDrawPath(contextRef,kCGPathStroke);
    
        3
  •  0
  •   Matthew Chen    14 年前

    前面的答案是正确的。另外,使用cosf()和sinf(),而不是cos()和sin()——您使用的是浮点精度。