Next: , Previous: , Up: Programming   [Contents][Index]

6.4 Transforms

Asymptote makes extensive use of affine transforms. A pair (x,y) is transformed by the transform t=(t.x,t.y,t.xx,t.xy,t.yx,t.yy) to (x',y'), where

x' = t.x + t.xx * x + t.xy * y
y' = t.y + t.yx * x + t.yy * y

This is equivalent to the PostScript transformation [t.xx t.yx t.xy t.yy t.x t.y].

Transforms can be applied to pairs, guides, paths, pens, strings, transforms, frames, and pictures by multiplication (via the binary operator *) on the left (see circle for an example). Transforms can be composed with one another and inverted with the function transform inverse(transform t); they can also be raised to any integer power with the ^ operator.

The built-in transforms are:

transform identity();

the identity transform;

transform shift(pair z);

translates by the pair z;

transform shift(real x, real y);

translates by the pair (x,y);

transform xscale(real x);

scales by x in the x direction;

transform yscale(real y);

scales by y in the y direction;

transform scale(real s);

scale by s in both x and y directions;

transform scale(real x, real y);

scale by x in the x direction and by y in the y direction;

transform slant(real s);

maps (x,y) –> (x+s*y,y);

transform rotate(real angle, pair z=(0,0));

rotates by angle in degrees about z;

transform reflect(pair a, pair b);

reflects about the line a--b.

The implicit initializer for transforms is identity(). The routines shift(transform t) and shiftless(transform t) return the transforms (t.x,t.y,0,0,0,0) and (0,0,t.xx,t.xy,t.yx,t.yy) respectively.

Next: , Previous: , Up: Programming   [Contents][Index]