Guest User

Untitled

a guest
Nov 15th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.80 KB | None | 0 0
  1. enum Result {
  2. case circle(center: CGPoint, radius: CGFloat)
  3. case invalid
  4. }
  5.  
  6. func circleTouching3Points(a: CGPoint, b: CGPoint, c: CGPoint) -> Result {
  7. let s1 = CGPoint(x: (a.x + b.x) / 2, y: (a.y + b.y) / 2)
  8. let d1 = CGPoint(x: b.y - a.y, y: a.x - b.x)
  9. let s2 = CGPoint(x: (a.x + c.x) / 2, y: (a.y + c.y) / 2)
  10. let d2 = CGPoint(x: c.y - a.y, y: a.x - c.x)
  11. let k: CGFloat = d2.x * d1.y - d2.y * d1.x
  12. guard k < -0.00001 || k > 0.00001 else {
  13. return Result.invalid
  14. }
  15. let l: CGFloat = d1.x * (s2.y - s1.y) - d1.y * (s2.x - s1.x)
  16. let m: CGFloat = l / k
  17. let center = CGPoint(x: s2.x + m * d2.x, y: s2.y + m * d2.y)
  18. let dx = center.x - a.x
  19. let dy = center.y - a.y
  20. let radius = sqrt(dx * dx + dy * dy)
  21. return Result.circle(center: center, radius: radius)
  22. }
Add Comment
Please, Sign In to add comment