CREATEBASISTRANSFORM Compute matrix for transforming a basis into another basis.
TRANSFO = createBasisTransform(SOURCE, TARGET)
Both SOURCE and TARGET represent basis, in the following form:
[x0 y0 ex1 ey1 ex2 ey2]
[y0 y0] is the origin of the basis, [ex1 ey1] is the first direction
vector, and [ex2 ey2] is the second direction vector.
The result TRANSFO is a 3-by-3 matrix such that a point expressed with
coordinates of the first basis will be represented by new coordinates
P2 = transformPoint(P1, TRANSFO) in the target basis.
TRANSFO = createBasisTransform(TARGET)
Assumes the source is the standard (Oij) basis, with origin at (0,0),
first direction vector equal to (1,0) and second direction vector
equal to (0,1).
Example
% define source and target bases
src = [ 0 0 1 0 0 1];
tgt = [20 0 .5 .5 -.5 .5];
trans = createBasisTransform(src, tgt);
% create a polygon in source basis
poly = [10 10;30 10; 30 20; 20 20;20 40; 10 40];
figure;
subplot(121); drawPolygon(poly, 'b'); axis equal; axis([-10 50 -10 50]);
hold on; drawLine([0 0 1 0], 'k'); drawLine([0 0 0 1], 'k');
drawLine([20 0 1 1], 'r'); drawLine([20 0 -1 1], 'r');
t = -1:5; plot(t*5+20, t*5, 'r.'); plot(-t*5+20, t*5, 'r.');
% transform the polygon in target basis
poly2 = transformPoint(poly, trans);
subplot(122); drawPolygon(poly2, 'b'); axis equal; axis([-10 50 -10 50]);
hold on; drawLine([0 0 1 0], 'r'); drawLine([0 0 0 1], 'r');
t = -1:5; plot(t*10, zeros(size(t)), 'r.'); plot(zeros(size(t)), t*10, 'r.');
See also
transforms2d
Package: matgeom