Warning: session_start(): Session cannot be started after headers have already been sent in /home/tvrreohg/public_html/manga.php on line 13
3
2øªjÞ# ã @ sŽ d Z ddlmZ ddddgZdZde Zde Zd d
„ ZG dd„ deƒZeƒ Z ddd„Z
ddd„ZedkrŠdd
l
Z
dd
lZe
jejƒ jƒ d
S )aº Affine 2D transformation matrix class.
The Transform class implements various transformation matrix operations,
both on the matrix itself, as well as on 2D coordinates.
Transform instances are effectively immutable: all methods that operate on the
transformation itself always return a new instance. This has as the
interesting side effect that Transform instances are hashable, ie. they can be
used as dictionary keys.
This module exports the following symbols:
Transform -- this is the main class
Identity -- Transform instance set to the identity transformation
Offset -- Convenience function that returns a translating transformation
Scale -- Convenience function that returns a scaling transformation
Examples:
>>> t = Transform(2, 0, 0, 3, 0, 0)
>>> t.transformPoint((100, 100))
(200, 300)
>>> t = Scale(2, 3)
>>> t.transformPoint((100, 100))
(200, 300)
>>> t.transformPoint((0, 0))
(0, 0)
>>> t = Offset(2, 3)
>>> t.transformPoint((100, 100))
(102, 103)
>>> t.transformPoint((0, 0))
(2, 3)
>>> t2 = t.scale(0.5)
>>> t2.transformPoint((100, 100))
(52.0, 53.0)
>>> import math
>>> t3 = t2.rotate(math.pi / 2)
>>> t3.transformPoint((0, 0))
(2.0, 3.0)
>>> t3.transformPoint((100, 100))
(-48.0, 53.0)
>>> t = Identity.scale(0.5).translate(100, 200).skew(0.1, 0.2)
>>> t.transformPoints([(0, 0), (1, 1), (100, 100)])
[(50.0, 100.0), (50.550167336042726, 100.60135501775433), (105.01673360427253, 160.13550177543362)]
>>>
é )Ú
NamedTupleÚ TransformÚIdentityÚOffsetÚScalegV瞯Ò<é c C s0 t | ƒtk rd} n| tkr d} n| tk r,d} | S )Nr r éÿÿÿÿ)ÚabsÚ_EPSILONÚ_ONE_EPSILONÚ_MINUS_ONE_EPSILON)Úv© r ú=/tmp/pip-build-_d5lkt3n/fonttools/fontTools/misc/transform.pyÚ_normSinCos; s r c @ s¸ e Zd ZU dZdZedZedZedZedZ e dZ
e
dd„ Zdd„ Zdd „ Z
d
d„ Zd!dd
„Zd"dd„Zdd„ Zd#dd„Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd „ ZdS )$r aw 2x2 transformation matrix plus offset, a.k.a. Affine transform.
Transform instances are immutable: all transforming methods, eg.
rotate(), return a new Transform instance.
Examples:
>>> t = Transform()
>>> t
>>> t.scale(2)
>>> t.scale(2.5, 5.5)
>>>
>>> t.scale(2, 3).transformPoint((100, 100))
(200, 300)
Transform's constructor takes six arguments, all of which are
optional, and can be used as keyword arguments:
>>> Transform(12)
>>> Transform(dx=12)
>>> Transform(yx=12)
Transform instances also behave like sequences of length 6:
>>> len(Identity)
6
>>> list(Identity)
[1, 0, 0, 1, 0, 0]
>>> tuple(Identity)
(1, 0, 0, 1, 0, 0)
Transform instances are comparable:
>>> t1 = Identity.scale(2, 3).translate(4, 6)
>>> t2 = Identity.translate(8, 18).scale(2, 3)
>>> t1 == t2
1
But beware of floating point rounding errors:
>>> t1 = Identity.scale(0.2, 0.3).translate(0.4, 0.6)
>>> t2 = Identity.translate(0.08, 0.18).scale(0.2, 0.3)
>>> t1
>>> t2
>>> t1 == t2
0
Transform instances are hashable, meaning you can use them as
keys in dictionaries:
>>> d = {Scale(12, 13): None}
>>> d
{: None}
But again, beware of floating point rounding errors:
>>> t1 = Identity.scale(0.2, 0.3).translate(0.4, 0.6)
>>> t2 = Identity.translate(0.08, 0.18).scale(0.2, 0.3)
>>> t1
>>> t2
>>> d = {t1: None}
>>> d
{: None}
>>> d[t2]
Traceback (most recent call last):
File "", line 1, in ?
KeyError:
r r c
C s@ |\}}| \}}}}}} || || | || || | fS )z‹Transform a point.
Example:
>>> t = Transform()
>>> t = t.scale(2.5, 5.5)
>>> t.transformPoint((100, 100))
(250.0, 550.0)
r )
ÚselfÚpÚxÚyÚxxÚxyÚyxÚyyÚdxÚdyr r r ÚtransformPoint• s zTransform.transformPointc s, | \‰‰‰‰‰ ‰‡ ‡‡‡‡‡fdd„|D ƒS )z·Transform a list of points.
Example:
>>> t = Scale(2, 3)
>>> t.transformPoints([(0, 0), (0, 100), (100, 100), (100, 0)])
[(0, 0), (0, 300), (200, 300), (200, 0)]
>>>
c s8 g | ]0\}}ˆ| ˆ| ˆ ˆ| ˆ| ˆ f‘qS r r )Ú.0r r )r r r r r r r r ú
¬ s z-Transform.transformPoints..r )r Zpointsr )r r r r r r r ÚtransformPoints¢ s zTransform.transformPointsc C s<