1
1
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:
Yuri Strot 2016-09-10 15:31:58 +07:00
parent 8a69348c42
commit 6104867add

View File

@ -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)
}
}