mirror of
https://github.com/exyte/Macaw.git
synced 2024-10-26 13:01:25 +03:00
Add relative rotation, fix shear.
This commit is contained in:
parent
8a69348c42
commit
6104867add
@ -10,7 +10,7 @@ public final class Transform {
|
||||
public let dx: Double
|
||||
public let dy: Double
|
||||
|
||||
public static let identity: Transform = Transform( )
|
||||
public static let identity: Transform = Transform()
|
||||
|
||||
public init(m11: Double = 1, m12: Double = 0, m21: Double = 0, m22: Double = 1, dx: Double = 0, dy: Double = 0) {
|
||||
self.m11 = m11
|
||||
@ -45,6 +45,11 @@ public final class Transform {
|
||||
m21: -asin * m11 + acos * m21, m22: -asin * m12 + acos * m22, dx: dx, dy: dy)
|
||||
}
|
||||
|
||||
// GENERATED NOT
|
||||
public func rotate(angle angle: Double, x: Double, y: Double) -> Transform {
|
||||
return move(dx: x, dy: y).rotate(angle: angle).move(dx: -x, dy: -y)
|
||||
}
|
||||
|
||||
// GENERATED
|
||||
public class func move(dx dx: Double, dy: Double) -> Transform {
|
||||
return Transform(dx: dx, dy: dy)
|
||||
@ -57,7 +62,7 @@ public final class Transform {
|
||||
|
||||
// GENERATED
|
||||
public class func shear(shx shx: Double, shy: Double) -> Transform {
|
||||
return Transform(m12: shx, m21: shy)
|
||||
return Transform(m12: shy, m21: shx)
|
||||
}
|
||||
|
||||
// GENERATED NOT
|
||||
@ -66,15 +71,20 @@ public final class Transform {
|
||||
return Transform(m11: acos, m12: asin, m21: -asin, m22: acos)
|
||||
}
|
||||
|
||||
// GENERATED NOT
|
||||
public class func rotate(angle angle: Double, x: Double, y: Double) -> Transform {
|
||||
return Transform.move(dx: x, dy: y).rotate(angle: angle).move(dx: -x, dy: -y)
|
||||
}
|
||||
|
||||
// GENERATED NOT
|
||||
public func invert() -> Transform? {
|
||||
let det = self.m11 * self.m22 - self.m12 * self.m21
|
||||
if (det == 0) {
|
||||
return nil
|
||||
}
|
||||
return Transform(m11: m22 / det, m12: -m12 / det, m21: -m21 / det, m22: m11 / det,
|
||||
dx: (m21 * dy - m22 * dx) / det,
|
||||
dy: (m12 * dx - m11 * dy) / det)
|
||||
}
|
||||
let det = self.m11 * self.m22 - self.m12 * self.m21
|
||||
if (det == 0) {
|
||||
return nil
|
||||
}
|
||||
return Transform(m11: m22 / det, m12: -m12 / det, m21: -m21 / det, m22: m11 / det,
|
||||
dx: (m21 * dy - m22 * dx) / det,
|
||||
dy: (m12 * dx - m11 * dy) / det)
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user