在ios核心图形中以固定间隔在CGRect椭圆上获取点

时间:2013-06-07 21:09:43

标签: ios core-graphics uibezierpath

我画了一个椭圆

CGRect paperRect = self.bounds;
CGRect strokeRect = CGRectInset(paperRect, 5.0, 5.0);
CGContextAddEllipseInRect(context, strokeRect);
CGContextStrokePath(context);

如何在椭圆上获得点(等距或等径),以便我可以使用CGContextAddArcToPoint一次连接两个相邻点(在循环中覆盖所有点)。

目标是获得一个椭圆,其边界由较小的弧组成。寻求帮助。

1 个答案:

答案 0 :(得分:1)

我可以给你一些方向。我假设你有几何学的基本知识 对于这种要求,如果你在极坐标中工作将会容易得多。在椭圆的圆周上找到等距点应该非常类似于在圆周上找到点,只是在两种情况下方程式会有所不同。
以下链接指向极坐标中的椭圆方程。 http://en.wikipedia.org/wiki/Ellipse#Polar_form_relative_to_center
而且你应该能够很容易地找到圆形表壳的代码。以下是一些相关链接。
Calculating the position of points in a circle
How do I calculate a point on a circle’s circumference?
这就是你的代码大致如下的方式

for (theta = 0 -> 360 degrees)
{
    r = ellipse_equation(theta);
    x = r*cos(theta) + h;//(h,k) is the center of the ellipse. You need to consider this translation if your ellipse is not centered at origin.
    y = r*sin(theta) + k;
    //Use these (x,y) values as you want
}

请记住,如果椭圆中心不在原点,则需要进行平移。根据需要选择for循环的增量。您可以使用弧度范围为02*PI的theta值,而不是度数。