extract corners() and reuse method for CGRect

This commit is contained in:
Paul Zabelin
2019-04-10 13:24:05 -07:00
parent 0e7af6191c
commit 73a618eb4b
5 changed files with 32 additions and 20 deletions

View File

@@ -18,11 +18,11 @@ class OpenCVPerformanceTest: XCTestCase {
lowerLeft: CGPoint(x: 459.781253, y: 251.836131))
let start: Quadrilateral = {
var one = Quadrilateral()
let overlayFrame = CGRect(x: 0, y: 0, width: 1, height: 1)
one.upperLeft = CGPoint(x: overlayFrame.minX, y: overlayFrame.minY)
one.upperRight = CGPoint(x: overlayFrame.maxX, y: overlayFrame.minY)
one.lowerLeft = CGPoint(x: overlayFrame.minX, y: overlayFrame.maxY)
one.lowerRight = CGPoint(x: overlayFrame.maxX, y: overlayFrame.maxY)
let corners = CGRect(x: 0, y: 0, width: 1, height: 1).corners()
one.upperLeft = corners[0]
one.upperRight = corners[1]
one.lowerLeft = corners[2]
one.lowerRight = corners[3]
return one
}()

View File

@@ -7,10 +7,11 @@ struct OpenCVAdapter: TransformMatrixCalculator {
var method: OpenCVTransformer
func transform(frame: CGRect, points: [CGPoint]) -> CATransform3D {
let start = Quadrilateral(upperLeft: CGPoint(x: frame.minX, y: frame.minY),
upperRight: CGPoint(x: frame.maxX, y: frame.minY),
lowerRight: CGPoint(x: frame.maxX, y: frame.maxY),
lowerLeft: CGPoint(x: frame.minX, y: frame.maxY))
let corners = frame.corners()
let start = Quadrilateral(upperLeft: corners[0],
upperRight: corners[1],
lowerRight: corners[3],
lowerLeft: corners[2])
let destination = Quadrilateral(upperLeft: points[0],
upperRight: points[1],
lowerRight: points[3],

View File

@@ -27,8 +27,7 @@ class CompareTransformSpecConfiguration: QuickConfiguration {
}
it("should be identity for same start and destination") {
let points = [CGPoint(x: 0, y: 0), CGPoint(x: 20, y: 0), CGPoint(x: 0, y: 10), CGPoint(x: 20, y: 10)]
let toItself = transformer.transform(frame: frame, points: points)
let toItself = transformer.transform(frame: frame, points: frame.corners())
expect(toItself) CATransform3DIdentity
}
@@ -53,10 +52,11 @@ struct AlgebraMethod: TransformMatrixCalculator {
destination.bottomRight = points[3]
let start = QuadrilateralCalc()
start.topLeft = CGPoint(x: frame.minX, y: frame.minY)
start.topRight = CGPoint(x: frame.maxX, y: frame.minY)
start.bottomLeft = CGPoint(x: frame.minX, y: frame.maxY)
start.bottomRight = CGPoint(x: frame.maxX, y: frame.maxY)
let corners = frame.corners()
start.topLeft = corners[0]
start.topRight = corners[1]
start.bottomLeft = corners[2]
start.bottomRight = corners[3]
return start.rectToQuad(rect: start.box(), quad: destination)
}

View File

@@ -90,3 +90,14 @@ extension GKRandomSource {
return Array(0...3).map {_ in nextPoint()}
}
}
extension CGRect {
func corners() -> [CGPoint] {
return [
CGPoint(x: minX, y: minY), // topLeft
CGPoint(x: maxX, y: minY), // topRight
CGPoint(x: minX, y: maxY), // bottomLeft
CGPoint(x: maxX, y: maxY) // bottomRight
]
}
}

View File

@@ -41,11 +41,11 @@ class PerformanceTest: XCTestCase {
destination.bottomRight = points[3]
let start = QuadrilateralCalc()
let overlayFrame = CGRect(x: 0, y: 0, width: 1, height: 1)
start.topLeft = CGPoint(x: overlayFrame.minX, y: overlayFrame.minY)
start.topRight = CGPoint(x: overlayFrame.maxX, y: overlayFrame.minY)
start.bottomLeft = CGPoint(x: overlayFrame.minX, y: overlayFrame.maxY)
start.topLeft = CGPoint(x: overlayFrame.maxX, y: overlayFrame.maxY)
let corners = CGRect(x: 0, y: 0, width: 1, height: 1).corners()
start.topLeft = corners[0]
start.topRight = corners[1]
start.bottomLeft = corners[2]
start.topLeft = corners[3]
measure {
repeatTimes.times {