5 #ifndef __cgraphicstransform__ 6 #define __cgraphicstransform__ 12 #define M_PI 3.14159265358979323846264338327950288 17 static inline double radians (
double degrees) {
return degrees * M_PI / 180; }
33 CGraphicsTransform (
double _m11,
double _m12,
double _m21,
double _m22,
double _dx,
double _dy)
34 : m11 (_m11), m12 (_m12), m21 (_m21), m22 (_m22), dx (_dx), dy (_dy)
45 return translate (p.x, p.y);
56 return scale (p.x, p.y);
61 angle = radians (angle);
62 *
this =
CGraphicsTransform (cos (angle), -sin (angle), sin (angle), cos (angle), 0, 0) *
this;
68 return translate (-center.x, -center.y).rotate (angle).translate (center.x, center.y);
83 bool isInvariant ()
const 88 void transform (CCoord& x, CCoord& y)
const 90 CCoord x2 = m11*x + m12*y + dx;
91 CCoord y2 = m21*x + m22*y + dy;
96 void transform (CCoord& left, CCoord& right, CCoord& top, CCoord& bottom)
const 98 transform (left, top);
99 transform (right, bottom);
104 transform (p.x, p.y);
110 transform (r.left, r.right, r.top, r.bottom);
117 const double denominator = m11 * m22 - m12 * m21;
118 if (denominator != 0)
120 result.m11 = m22 / denominator;
121 result.m12 = -m12 / denominator;
122 result.m21 = -m21 / denominator;
123 result.m22 = m11 / denominator;
124 result.dx = ((m12 * dy) - (m22 * dx)) / denominator;
125 result.dy = ((m21 * dx) - (m11 * dy)) / denominator;
133 result.m11 = (m11 * t.m11) + (m12 * t.m21);
134 result.m21 = (m21 * t.m11) + (m22 * t.m21);
135 result.dx = (m11 * t.dx) + (m12 * t.dy) + dx;
136 result.m12 = (m11 * t.m12) + (m12 * t.m22);
137 result.m22 = (m21 * t.m12) + (m22 * t.m22);
138 result.dy = (m21 * t.dx) + (m22 * t.dy) + dy;
146 return m11 == t.m11 && m12 == t.m12 && m21 == t.m21 && m22 == t.m22 && dx == t.dx && dy == t.dy;
151 return m11 != t.m11 || m12 != t.m12 || m21 != t.m21 || m22 != t.m22 || dx != t.dx || dy != t.dy;
158 #endif // __cgraphicstransform__ Rect structure.
Definition: crect.h:17
Definition: customcontrols.cpp:8
Point structure.
Definition: cpoint.h:17