我需要在任何(不仅仅是正方形)给定矩形(灰色框)的边缘找到点(绿点),其中从矩形中心开始的线(红线)将与矩形相交。
该功能应如下所示:
func intersection(forAngle angle: CGFloat, rect: CGRect) -> CGPoint {
// Do magic here
}
gist可轻松实现可以粘贴到macOS游乐场的可视化
这是我到目前为止所做的:
let t = tan(angle)
switch angle {
case 0..<(pi/2):
//top right corner - works but only for square rects
// t > 1 => top edge, t < 1 right edge
let x = t > 1 ? rect.width + (1 - t) * rect.width / 2 : rect.width
let y = t < 1 ? t * rect.height / 2 + rect.height / 2 : rect.height
return CGPoint(x: x, y: y)
case (pi/2)..<pi:
//top left corner
case pi..<(1.5*pi):
//bottom left corner
case 1.5*pi..<2*pi:
//bottom right corner
default:
return CGPoint.zero
}