【iOS】一种获取圆/弧上等分点的思路

要求:

  • Platform: iOS8.0+
  • Language: Swift3.1
  • Editor: Xcode8.3.2

本文主要讨论的问题有:

1. 给定等分数N,找到圆上相应的等分位置P1...Pn;
【iOS】一种获取圆/弧上等分点的思路_第1张图片
问题1

代码实现

    fileprivate func one()
    {
        let N = 10, R: CGFloat = 100
        let angle = 360.0/CGFloat(N) * CGFloat.pi/180.0
        
        for i in 0..
【iOS】一种获取圆/弧上等分点的思路_第2张图片
实现效果
2. 给定一个弦值W【子元素宽度】和圆的半径R,求最大等分数N;
【iOS】一种获取圆/弧上等分点的思路_第3张图片
问题2

代码实现 - 但不知这种算法为何不太准确,有待优化

    fileprivate func two()
    {
        let W: CGFloat = 80, R: CGFloat = 100
        let angle = 2.0 * atan(W / (2.0*R - W))
        let N = Int(2.0 * CGFloat.pi / angle)
        for i in 0..
【iOS】一种获取圆/弧上等分点的思路_第4张图片
实现效果
3. 给定等分数N,求使各个元素不重叠的圆的最大半径R;
【iOS】一种获取圆/弧上等分点的思路_第5张图片
问题3

代码实现

fileprivate func three()
    {
        let W: CGFloat = 60, N = 8
        let angle = 2*CGFloat.pi / CGFloat(N)
        var R = W //默认让半径等于W
        
        // 计算 x 是否 <= w/2
        var x = R * sin(angle/2)
        while x < W/2+10 { //10为间距
            R += 1
            x = R * sin(angle/2) //重叠的最小间距
        }
        for i in 0..
【iOS】一种获取圆/弧上等分点的思路_第6张图片
实现效果
【iOS】一种获取圆/弧上等分点的思路_第7张图片
元素数越多,半径越大

你可能感兴趣的:(【iOS】一种获取圆/弧上等分点的思路)