mirror of
https://github.com/zhigang1992/PerspectiveTransform.git
synced 2026-04-29 20:55:21 +08:00
use corners, store vectors
rename extensions, update playground
This commit is contained in:
@@ -9,19 +9,19 @@
|
||||
import simd
|
||||
|
||||
public final class Perspective {
|
||||
let quadrilateral : Quadrilateral
|
||||
let vectors : [Vector3Type]
|
||||
|
||||
public init(_ q: Quadrilateral) {
|
||||
quadrilateral = q
|
||||
vectors = q.corners.map{$0.homogeneous3dvector}
|
||||
}
|
||||
|
||||
lazy var basisVectorsToPointsMap: Matrix3x3Type! = {
|
||||
let m = Matrix3x3Type([
|
||||
self.quadrilateral.p1.homogeneous3dvector,
|
||||
self.quadrilateral.p2.homogeneous3dvector,
|
||||
self.quadrilateral.p3.homogeneous3dvector]
|
||||
self.vectors[0],
|
||||
self.vectors[1],
|
||||
self.vectors[2]]
|
||||
)
|
||||
let solution = m.homogeneousInverse() * self.quadrilateral.p4.homogeneous3dvector
|
||||
let solution = m.homogeneousInverse() * self.vectors[3]
|
||||
let scale = Matrix3x3Type(diagonal: solution)
|
||||
let basisToPoints = m * scale
|
||||
return basisToPoints.zNormalized()
|
||||
|
||||
@@ -9,16 +9,10 @@
|
||||
import UIKit
|
||||
|
||||
public final class Quadrilateral {
|
||||
public let p1 : CGPoint
|
||||
public let p2 : CGPoint
|
||||
public let p3 : CGPoint
|
||||
public let p4 : CGPoint
|
||||
public let corners : [CGPoint]
|
||||
|
||||
public init(_ points:[CGPoint]) {
|
||||
p1 = points[0]
|
||||
p2 = points[1]
|
||||
p3 = points[2]
|
||||
p4 = points[3]
|
||||
corners = points
|
||||
}
|
||||
public convenience init(_ origin:CGPoint, _ size:CGSize) {
|
||||
self.init([
|
||||
|
||||
Reference in New Issue
Block a user