Trafo
A geometrical basis.
// Till Bovermann, Uni Bielefeld 2006
[ Creation ]
*new(basis, d)
creates new Basis from basis Vectors.
basis default:
[[1, 0, 0],
[0, 1, 0],
[0, 0, 1]];
d position-vector, default 0.
(
t = Trafo([
[0, 2, 0],
[0, 0, 6],
[5, 0, 0]
], [3, 4, 5])
)
t = Trafo.new(d: [0,0,0])
*basicNew(trans)
creates new Basis from transformation
*from3dPoints(a, b, c)
creates new Basis from 3d Points.
(
t = Trafo.from3dPoints(
[0, 2, 0],
[3, 3, 0],
[15, 2, 0]
)
)
/* returns
Trafo.basicNew( Matrix[
[ 0.94868329805051, 0.31622776601684, 0, 0 ],
[ 0.31622776601684, -0.94868329805051, 0, 2 ],
[ 0, 0, -1, 0 ],
[ 0, 0, 0, 1 ]
] )
*/
// don't work, since basis is collinear...
t = Trafo.from3dPoints(
[0, 2, 0],
[0, 2, 0],
[15, 2, 0]
)
*inverseFrom3dPoints(a, b, c)
creates new Basis from 3d Points.
(
t = Trafo.inverseFrom3dPoints(
[0, 2, 0],
[3, 3, 0],
[15, 2, 0]
);
u = Trafo.inverseFrom3dPoints(
[0, 2, 0],
[3, 3, 0],
[15, 2, 0]
);
)
(
{200.do{
Trafo.inverseFrom3dPoints(
[0, 2, 0],
[3, 3, 0],
[15, 2, 0]
);
}}.bench;
{200.do{
Trafo.from3dPoints(
[0, 2, 0],
[3, 3, 0],
[15, 2, 0]
).inverse;
}}.bench;
)
[ Accessing ]
rotMatrix
returns the used rotation matrix
(
t = Trafo.from3dPoints(
[0, 0, 0],
[pi, 3, 0],
[15, 2, 0]
);
t.rotMatrix
)
(
t = Trafo.new;
t.rotMatrix
)
basis
returns the basis vectors as
[[x1, x2, x3],[y1, y2, y3],[z1, z2, z3]]
(
t = Trafo([
[0, 2, 0],
[3, 0, 0],
[0, 0, 15]
]);
t.basis
)
position
returns the translative part
(
t = Trafo.new;
t.position
)
[ Transforming ]
inverse
returns new Trafo where (t * t.inverse vmul: v) == v;
(
t = Trafo.new;
t.inverse
)
vmul(aVec, scale)
transforms aVec with scaling scale to the trafo-inherited basis.
t = Trafo.new; // the identity
t.vmul( [1, 0, 0]);
(
{2000.do{
t = Trafo.new({{1.0.rand}!3}!3, {1.0.rand}!3);
t vmul: ({1.0.rand}!3)
}}.bench
)
t = Trafo.from3dPoints(
[0, 0, 0],
[pi, 3, 0],
[15, 2, 0]
)
t.vmul( [1, 0, 0])