在圆圈周围绘制尺寸均匀的标签

时间:2015-10-18 13:42:20

标签: algorithm ios graphics

我需要在圆圈周围绘制一些大小均匀且间隔开的标签:

enter image description here

我是客观的。可以创建像这样的椭圆

UIBezierPath* ovalPath = [UIBezierPath bezierPathWithOvalInRect: CGRectMake(84, 22, 75, 75)];
[UIColor.grayColor setFill];
[ovalPath fill];

试图弄清楚如何获取这些标签。谁能给我一些指示我如何解决这个问题?需要在圆圈周围绘制1到20个标签。想知道是否有某种算法。

1 个答案:

答案 0 :(得分:1)

这需要你做一些数学运算。我不打算为你做数学,但我可以告诉你你需要做什么。

使用六个均匀间隔的标签,圆上每个标签的中心点相隔60度。如果我们假设0度是直线上升,那么您需要以0,60,120,180,240和300度为中心的标签。而且由于它看不到标签的边缘相遇,我假设每个标签都覆盖了50度的弧度。

看起来标签的顶部不是平坦的,而是较大圆圈的一部分。如果我们在图片r中调用圆的半径,那么较大圆的半径为r + h,其中h是标签的高度。

如果第一个标签的中心位于0度,则第一个标签的左边缘为-25度(或335度),第一个标签的右边缘为25度。

所以,要绘制第一个标签:

  • 找到内圈上335度的点。然后在外圆上找到335度的点。在这两点之间画一条线。这是标签的左边缘。
  • 找到内圈上25度的点。然后找到外圆上的对应点并在它们之间画一条线。这是标签的右边缘。
  • 在两个外圆点之间绘制半径为r + h的50度弧。
  • 您的标签已被绘制。

然后对以60度为中心的弧做同样的事情。你的线条将在25度和85度。对其他标签重复该过程。

要以给定角度查找圆上的点,请参阅Calculating point on a circle's circumference from angle in C#?

要绘制圆弧,请参阅http://www.raywenderlich.com/33193/core-graphics-tutorial-arcs-and-paths

如果标签覆盖多于或少于50度的弧度,请相应调整上面的数字。也就是说,如果标签覆盖40度的弧度,那么第一个标签的左边缘将是-20(340)度,而不是-25(335)度。

请注意,您可能需要将所有度数测量值转换为弧度。