在iPhone中帮助绘制圆圈
以下是我试图绘制圆圈的一段代码,但是我的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);
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));
以前的答案是正确的。另外,使用cosf()和sinf(),而不是cos()和sin() - 你正在使用浮点精度。
“以前的答案”没有说太多,当他们都“回答”08年8月5日“。你应该用作者的名字来引用答案。 – 2010-08-05 20:52:42
马修感谢,有趣的是,sin()和cos()在最终的绘图中给我足够的分辨率......这意味着我应该使用这些分辨率?或者稍后我会遇到问题。 – Skawful 2010-08-06 02:15:33
您只需要2行代码即可绘制出真正的圆形圆。我的示例代码:
CGContextAddArc(contextRef,centerX,centerY,radius,0,2*3.1415926535898,1);
CGContextDrawPath(contextRef,kCGPathStroke);
您也可以将分隔符的一边或另一边转换为浮点类型;例如'i /(CGFloat)sides'。但是,'CGPathAddEllipseInRect'是正确的方法;密谋自己是一个艰难的方式。 – 2010-08-05 20:27:04
@彼得,这两种分裂方式有什么区别吗?或者编译器最终使它们的指令相同? – Vladimir 2010-08-05 20:46:38
你是一个乘法和一个分裂;我的是一个师。编译器可能会非常好地优化乘法,但我宁愿不为它编写代码。 – 2010-08-05 20:51:24