[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [Calligra] 11e26b5: PerspectiveAssistant::distance(): optimize
From:       Geoffry Song <goffrie () gmail ! com>
Date:       2010-12-31 23:27:34
Message-ID: 20101231232734.9B393A60A6 () git ! kde ! org
[Download RAW message or body]

commit 11e26b500abc2d829f72ef78756a04ad2597fe31
branch master
Author: Geoffry Song <goffrie@gmail.com>
Date:   Thu Dec 30 13:35:09 2010 -0500

    PerspectiveAssistant::distance(): optimize

diff --git a/krita/plugins/assistants/RulerAssistant/PerspectiveAssistant.cc \
b/krita/plugins/assistants/RulerAssistant/PerspectiveAssistant.cc index \
                1657293..a41b5e6 100644
--- a/krita/plugins/assistants/RulerAssistant/PerspectiveAssistant.cc
+++ b/krita/plugins/assistants/RulerAssistant/PerspectiveAssistant.cc
@@ -133,7 +133,21 @@ inline qreal localScale(const QTransform& transform, QPointF pt)
                 b = y + transform.m33(),
                 c = x + y + transform.m33(),
                 d = c * c;
-    return fabs(a)*fabs(a + transform.m23())*fabs(b)*fabs(b + transform.m13())/(d * \
d); +    return fabs(a*(a + transform.m23())*b*(b + transform.m13()))/(d * d);
+}
+
+// returns the maximum local scale at the points (0,0),(0,1),(1,0),(1,1)
+inline qreal maxLocalScale(const QTransform& transform)
+{
+    const qreal a = fabs((transform.m33() + transform.m13()) * (transform.m33() + \
transform.m23())), +                b = fabs((transform.m33()) * (transform.m13() + \
transform.m33() + transform.m23())), +                d00 = transform.m33() * \
transform.m33(), +                d11 = (transform.m33() + transform.m23() + \
transform.m13())*(transform.m33() + transform.m23() + transform.m13()), +             \
s0011 = d00 > d11 ? a / d11 : a / d00, +                d10 = (transform.m33() + \
transform.m13()) * (transform.m33() + transform.m13()), +                d01 = \
(transform.m33() + transform.m23()) * (transform.m33() + transform.m23()), +          \
s1001 = d10 > d01 ? b / d01 : b / d10; +    return qMax(s0011, s1001);
 }
 
 qreal PerspectiveAssistant::distance(const QPointF& pt) const
@@ -149,14 +163,7 @@ qreal PerspectiveAssistant::distance(const QPointF& pt) const
         // point at infinity
         return 0.0;
     }
-    QPointF realPoint = inverse.map(pt);
-    const qreal corners[4] = {
-        localScale(transform, QPointF(0.0, 0.0)),
-        localScale(transform, QPointF(0.0, 1.0)),
-        localScale(transform, QPointF(1.0, 0.0)),
-        localScale(transform, QPointF(1.0, 1.0))};
-    const qreal max = std::max(std::max(corners[0], corners[1]), \
                std::max(corners[2], corners[3]));
-    return localScale(transform, inverse.map(pt)) / max;
+    return localScale(transform, inverse.map(pt)) / maxLocalScale(transform);
 }
 
 // draw a vanishing point marker


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic