38 lines
816 B
Python
38 lines
816 B
Python
import math
|
|
from typing import NamedTuple
|
|
|
|
# For more details, see the PDF Reference, 6th Ed., Section 4.2.2 ("Common
|
|
# Transformations")
|
|
|
|
|
|
class CTM(NamedTuple):
|
|
a: float
|
|
b: float
|
|
c: float
|
|
d: float
|
|
e: float
|
|
f: float
|
|
|
|
@property
|
|
def scale_x(self) -> float:
|
|
return math.sqrt(pow(self.a, 2) + pow(self.b, 2))
|
|
|
|
@property
|
|
def scale_y(self) -> float:
|
|
return math.sqrt(pow(self.c, 2) + pow(self.d, 2))
|
|
|
|
@property
|
|
def skew_x(self) -> float:
|
|
return (math.atan2(self.d, self.c) * 180 / math.pi) - 90
|
|
|
|
@property
|
|
def skew_y(self) -> float:
|
|
return math.atan2(self.b, self.a) * 180 / math.pi
|
|
|
|
@property
|
|
def translation_x(self) -> float:
|
|
return self.e
|
|
|
|
@property
|
|
def translation_y(self) -> float:
|
|
return self.f
|