14 #ifndef GIL_AFFINE_HPP 15 #define GIL_AFFINE_HPP 17 #include <boost/gil/utilities.hpp> 28 namespace boost {
namespace gil {
38 matrix3x2() : a(1), b(0), c(0), d(1), e(0), f(0) {}
39 matrix3x2(T A, T B, T C, T D, T E, T F) : a(A),b(B),c(C),d(D),e(E),f(F) {}
40 matrix3x2(
const matrix3x2& mat) : a(mat.a), b(mat.b), c(mat.c), d(mat.d), e(mat.e), f(mat.f) {}
41 matrix3x2& operator=(
const matrix3x2& m) { a=m.a; b=m.b; c=m.c; d=m.d; e=m.e; f=m.f;
return *
this; }
45 static matrix3x2 get_rotate(T rads) { T c=std::cos(rads); T s=std::sin(rads);
return matrix3x2(c,s,-s,c,0,0); }
46 static matrix3x2 get_translate(
const point2<T>& t) {
return matrix3x2(1 ,0,0,1 ,t.x,t.y); }
48 static matrix3x2 get_scale (
const point2<T>& s) {
return matrix3x2(s.x,0,0,s.y,0 ,0 ); }
58 m1.a * m2.a + m1.b * m2.c,
59 m1.a * m2.b + m1.b * m2.d,
60 m1.c * m2.a + m1.d * m2.c,
61 m1.c * m2.b + m1.d * m2.d,
62 m1.e * m2.a + m1.f * m2.c + m2.e,
63 m1.e * m2.b + m1.f * m2.d + m2.f );
66 template <
typename T,
typename F>
67 point2<F> operator*(
const point2<T>& p,
const matrix3x2<F>& m) {
68 return point2<F>(m.a*p.x + m.c*p.y + m.e, m.b*p.x + m.d*p.y + m.f);
88 typedef point2<F> result_type;
91 template <
typename F,
typename F2>
92 point2<F> transform(
const matrix3x2<F>& mat,
const point2<F2>& src) {
return src * mat; }
Define affine mapping that transforms the source coordinates by the affine transformation.