uLib  User mode C/C++ extended API library for Win32 programmers.
Xform.cpp
Go to the documentation of this file.
1 //-----------------------------------------------------------------------------
2 // Synopsis: Some support for XFORM transformations.
3 // Author: Copyright (c) Love Nystrom
4 // License: NNOSL (BSD descendant)
5 // Synopsis: This file contains definitions for common XFORM transformations.
6 //-----------------------------------------------------------------------------
7 
8 #include <uLib/UtilFunc.h> // Decl in WinGDI section
9 
10 //-----------------------------------------------------------------------------
11 // [x'y'1] = [x y 1] | eM11 eM12 0 |
12 // | eM21 eM22 0 |
13 // | eDx eDy 1 |
14 //
15 // x' = x * eM11 + y * eM21 + eDx;
16 // y' = x * eM12 + y * eM22 + eDy;
17 //-----------------------------------------------------------------------------
18 
19 // Translate: x' = x + dx ; y' = y + dy
20 
21 XFORM* SetXformTranslate( XFORM* pxfm, float dx, float dy )
22 {
23  static const XFORM xlate = {
24  1, 0, // eM11 eM12
25  0, 1, // eM21 eM22
26  dx, dy // eDx eDy
27  };
28  *pxfm = xlate;
29  return pxfm;
30 }
31 
32 // Scale: x' = x * dx ; y' = y * dy
33 
34 XFORM* SetXformScale( XFORM* pxfm, float dx, float dy )
35 {
36  static const XFORM scale = {
37  dx, 0,
38  0, dy,
39  0, 0
40  };
41  *pxfm = scale;
42  return pxfm;
43 }
44 
45 // Rotate: x' = (x * cos A) - (y * sin A) ; y' = (x * sin A) + (y * cos A)
46 
47 XFORM* SetXformRotate( XFORM* pxfm, double angle )
48 {
49  float co = (float) cos( angle );
50  float si = (float) sin( angle );
51  static const XFORM rotate = {
52  co, si,
53  -si, co,
54  0, 0
55  };
56  *pxfm = rotate;
57  return pxfm;
58 }
59 
60 // Shear: x' = x + (Sx * y) ; y' = y + (Sy * x)
61 
62 XFORM* SetXformShear( XFORM* pxfm, float sx, float sy )
63 {
64  static const XFORM shear = {
65  1, sy,
66  sx, 1,
67  0, 0
68  };
69  *pxfm = shear;
70  return pxfm;
71 }
72 
73 // Reflect: x' = -x ; y' = -y
74 
75 XFORM* SetXformReflect( XFORM* pxfm, bool rx, bool ry )
76 {
77  float xf = float( rx ? -1 : 1 );
78  float yf = float( ry ? -1 : 1 );
79  static const XFORM reflect = {
80  xf, 0,
81  0, yf,
82  0, 0
83  };
84  *pxfm = reflect;
85  return pxfm;
86 }
87 
88 // EOF
XFORM * SetXformScale(XFORM *pxfm, float dx, float dy)
Definition: Xform.cpp:34
XFORM * SetXformTranslate(XFORM *pxfm, float dx, float dy)
Definition: Xform.cpp:21
XFORM * SetXformShear(XFORM *pxfm, float sx, float sy)
Definition: Xform.cpp:62
XFORM * SetXformRotate(XFORM *pxfm, double angle)
Definition: Xform.cpp:47
XFORM * SetXformReflect(XFORM *pxfm, bool rx, bool ry)
Definition: Xform.cpp:75