我想先说我在数学方面不是很娴熟。请原谅我的问题对你来说似乎微不足道,但我不能完全理解它。
我需要在给定半径和中心的圆上分布和对齐一些视图。这真的没问题,我已经做得很好了。我甚至可以为对齐圆指定最大和最小角度,因此我的视图将仅分布在半圆或类似的东西上。
为了提供更好的见解,这是我的代码:
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++
}
问题是,我的所有视图都必须在给定的矩形中。根据我的圆心,某些视图可能会放在矩形之外,因此也会放在屏幕外。
要解决这个问题,我想尝试只使用一个半圆,如果一个完整的圆圈不适合我的矩形。如前所述,我的代码已经通过指定不同的minAngle
或maxAngle
使用半圆工作。问题是我不知道如何计算minAngle
和maxAngle
,以便半圆适合我的矩形。
为了进一步澄清我的问题,我试着说明一下:
TL; DR:我需要计算矩形和箭头标记的圆圈之间的交点角度。
其他信息:
答案 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)