changeset 575:919226caca82

AffineTransform2D::ComputeZoom()
author Sebastien Jodogne <s.jodogne@gmail.com>
date Fri, 19 Apr 2019 09:08:15 +0200
parents 911297a277c4
children 529c9617654b
files Framework/Toolbox/AffineTransform2D.cpp Framework/Toolbox/AffineTransform2D.h
diffstat 2 files changed, 32 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/Framework/Toolbox/AffineTransform2D.cpp	Thu Apr 18 18:06:29 2019 +0200
+++ b/Framework/Toolbox/AffineTransform2D.cpp	Fri Apr 19 09:08:15 2019 +0200
@@ -130,6 +130,36 @@
   }
 
 
+  double AffineTransform2D::ComputeZoom() const
+  {
+    // Compute the length of the (0,0)-(1,1) diagonal (whose
+    // length is sqrt(2)) instead of the (0,0)-(1,0) unit segment,
+    // in order to cope with possible anisotropic zooming
+        
+    double x1 = 0;
+    double y1 = 0;
+    Apply(x1, y1);
+
+    double x2 = 1;
+    double y2 = 1;
+    Apply(x2, y2);
+
+    double dx = x2 - x1;
+    double dy = y2 - y1;
+
+    double zoom = sqrt(dx * dx + dy * dy) / sqrt(2.0);
+
+    if (LinearAlgebra::IsCloseToZero(zoom))
+    {
+      return 1;  // Default value if transform is ill-conditioned 
+    }
+    else
+    {
+      return zoom;
+    }
+  }    
+
+
   AffineTransform2D AffineTransform2D::Invert(const AffineTransform2D& a)
   {
     AffineTransform2D t;
--- a/Framework/Toolbox/AffineTransform2D.h	Thu Apr 18 18:06:29 2019 +0200
+++ b/Framework/Toolbox/AffineTransform2D.h	Fri Apr 19 09:08:15 2019 +0200
@@ -60,6 +60,8 @@
     void ConvertToOpenGLMatrix(float target[16],
                                unsigned int canvasWidth,
                                unsigned int canvasHeight) const;
+
+    double ComputeZoom() const;
     
     static AffineTransform2D Invert(const AffineTransform2D& a);