计算与rect

时间:2015-08-19 12:42:37

标签: ios geometry core-graphics

我想先说我在数学方面不是很娴熟。请原谅我的问题对你来说似乎微不足道,但我不能完全理解它。

我需要在给定半径和中心的圆上分布和对齐一些视图。这真的没问题,我已经做得很好了。我甚至可以为对齐圆指定最大和最小角度,因此我的视图将仅分布在半圆或类似的东西上。

为了提供更好的见解,这是我的代码:

    var minAngle: Double = 270
    var maxAngle: Double = 630
    var i = 0
    let maxIndizes = isFullCircle(minAngle, maxAngle: maxAngle) ? subviews.count : subviews.count - 1

    subviews.forEach { (subview: UIView) -> () in
        let angle = getAngleForIndex(i, max: maxIndizes, minAngle: minAngle, maxAngle: maxAngle)
        let radius = Double(bounds.width / 2)
        let circlePos = getPointForAngle(angle, radius: radius)

        let view = UIView()
        addSubview(view)
        view.center = circlePos

        i++
    }

问题是,我的所有视图都必须在给定的矩形中。根据我的圆心,某些视图可能会放在矩形之外,因此也会放在屏幕外。

要解决这个问题,我想尝试只使用一个半圆,如果一个完整的圆圈不适合我的矩形。如前所述,我的代码已经通过指定不同的minAnglemaxAngle使用半圆工作。问题是我不知道如何计算minAnglemaxAngle,以便半圆适合我的矩形。

为了进一步澄清我的问题,我试着说明一下:

Illustration

TL; DR:我需要计算矩形和箭头标记的圆圈之间的交点角度。

其他信息:

  • 圆直径始终小于矩形宽度或高度
  • 该应用针对的是iOS 9
  • 任何代码都是用Swift 2编写的,因此可能需要Xcode 7

1 个答案:

答案 0 :(得分:0)

让圆心为(cx,cy),raidus R,矩形的左上角和右下角为(x1,y1) - (x2,y2)

解决这样的方程式(这个是矩形的左边缘)

(x1-cx)^2 + (y-cy)^2 = R^2

如果存在y的解,请检查Y找到(一个或两个解)是否在[y1..y2]范围内。如果是,则计算此交点的角度

Fi = atan2(y-cy, x1-cx)