1 //----------------------------------------------------------------------------
2 // Anti-Grain Geometry - Version 2.1
3 // Copyright (C) 2002-2005 Maxim Shemanarev (http://www.antigrain.com)
5 // Permission to copy, use, modify, sell and distribute this software
6 // is granted provided this copyright notice appears in all copies.
7 // This software is provided "as is" without express or implied
8 // warranty, and with no claim as to its suitability for any purpose.
10 //----------------------------------------------------------------------------
11 // Contact: mcseem@antigrain.com
12 // mcseemagg@yahoo.com
13 // http://www.antigrain.com
14 //----------------------------------------------------------------------------
16 #ifndef AGG_WARP_MAGNIFIER_INCLUDED
17 #define AGG_WARP_MAGNIFIER_INCLUDED
20 #include "agg_basics.h"
26 class trans_warp_magnifier
29 trans_warp_magnifier() : m_xc(0.0), m_yc(0.0), m_magn(1.0), m_radius(1.0), m_warp(false) {}
31 void center(double x
, double y
) { m_xc
= x
; m_yc
= y
; }
32 void magnification(double m
) { m_magn
= m
; }
33 void radius(double r
) { m_radius
= r
; }
34 void warp(bool w
) { m_warp
= w
; }
36 void transform(double* x
, double* y
) const
38 double dx
= *x
- m_xc
;
39 double dy
= *y
- m_yc
;
40 double r
= sqrt(dx
* dx
+ dy
* dy
);
41 double rm
= m_radius
/ m_magn
;
44 *x
= m_xc
+ dx
* m_magn
;
45 *y
= m_yc
+ dy
* m_magn
;
51 double m
= (r
+ rm
* (m_magn
- 1.0)) / r
;
59 double m
= m_radius
/ r
;