Advertisement
Guest User

Untitled

a guest
Oct 15th, 2019
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.35 KB | None | 0 0
  1. import UIKit
  2. import simd
  3. import Accelerate
  4.  
  5. extension CGPoint {
  6. init(simd3: SIMD3<Double>) {
  7. self.init(x: simd3.x, y: simd3.y)
  8. }
  9. }
  10.  
  11. extension simd_double3 {
  12. init(point: CGPoint) {
  13. self.init(x: Double(point.x), y: Double(point.y), z: Double(1))
  14. }
  15. }
  16.  
  17. struct CGLine {
  18. let start: CGPoint
  19. let end: CGPoint
  20.  
  21. var norm: CGPoint {
  22. let dy = end.y - start.y
  23. let dx = end.x - start.x
  24. return CGPoint(x: start.x + dy, y: start.y - dx)
  25. }
  26. }
  27.  
  28. extension CGAffineTransform {
  29. init(from initialLine: CGLine, to transformedLine: CGLine) {
  30. let initMat = simd_double3x3(
  31. simd_double3(point: initialLine.start),
  32. simd_double3(point: initialLine.end),
  33. simd_double3(point: initialLine.norm)
  34. ).transpose
  35.  
  36. let transformedMat = simd_double3x3(
  37. simd_double3(point: transformedLine.start),
  38. simd_double3(point: transformedLine.end),
  39. simd_double3(point: transformedLine.norm)
  40. ).transpose
  41.  
  42. let transMat = simd_mul(initMat.inverse, transformedMat).transpose
  43.  
  44. self.init(
  45. a: CGFloat(transMat.columns.0.x), b: CGFloat(transMat.columns.0.y),
  46. c: CGFloat(transMat.columns.1.x), d: CGFloat(transMat.columns.1.y),
  47. tx: CGFloat(transMat.columns.2.x), ty: CGFloat(transMat.columns.2.y)
  48. )
  49. }
  50. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement