如何找到rect和从中心开始的直线的交点?

时间:2016-09-27 23:07:26

标签: swift geometry

我需要在任何(不仅仅是正方形)给定矩形(灰色框)的边缘找到点(绿点),其中从矩形中心开始的线(红线)将与矩形相交。

visualization

该功能应如下所示:

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
}

0 个答案:

没有答案