2010-08-05 3 views
1

Ниже приведен фрагмент кода, где я пытаюсь нарисовать круг, но мое значение x печатает как постоянное значение. Скорее всего, это очень просто. Заранее благодарю за любую помощь.Помощь в рисовании круга в iPhone

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); 

ответ

8
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)); 
+0

Вы также можете просто преобразовать одну сторону деления или другой в тип с плавающей точкой; например, 'i/(CGFloat) сторон'. Но да, 'CGPathAddEllipseInRect' - правильный способ сделать это; построение самого гекатогона - это трудный путь. –

+0

@Peter, есть ли разница между этими двумя способами разделить? Или компилятор, наконец, делает им те же инструкции? – Vladimir

+0

Ваше умножение и деление; моя - это разделение. Компилятор может очень хорошо оптимизировать умножение, но я бы предпочел не писать код для него в первую очередь. –

0

Предыдущий ответ является правильным. Кроме того, используйте cosf() и sinf(), а не cos() и sin() - вы работаете с точностью float.

+2

«Предыдущий ответ» не говорит много, когда все они «ответили авг 05 '10». Вы должны сослаться на ответ по имени автора. –

+0

Мэтью благодарит, достаточно интересно, что sin() и cos() дают мне достаточное разрешение в финальном рисунке ... это означало бы, что я должен просто использовать их? Или у меня будут проблемы после этого. – Skawful

5

Вам нужно всего лишь 2 строки кода, чтобы нарисовать круглый круг. Мой код:

CGContextAddArc(contextRef,centerX,centerY,radius,0,2*3.1415926535898,1); 
CGContextDrawPath(contextRef,kCGPathStroke); 
Смежные вопросы