Author: Carlos Lopez <genet...@gmail.com>
Date:   Wed Jan  4 18:29:21 2012 +0100

Suit a better way to calculate gradient magnitude

---

 synfig-core/src/synfig/gradient.cpp |   15 ++++++++++++---
 1 files changed, 12 insertions(+), 3 deletions(-)

diff --git a/synfig-core/src/synfig/gradient.cpp 
b/synfig-core/src/synfig/gradient.cpp
index 8e9ab47..340a59f 100644
--- a/synfig-core/src/synfig/gradient.cpp
+++ b/synfig-core/src/synfig/gradient.cpp
@@ -293,12 +293,21 @@ synfig::Gradient::operator/=(const float    &rhs)
 Real
 synfig::Gradient::mag()const
 {
-       Real ret(0);
-       for (const_iterator iter = cpoints.begin(); iter!=cpoints.end(); iter++)
+       Real ret(0), cm, prev_pos;
+       const_iterator iter, next;
+       if(!cpoints.size())
+               return 0.0;
+       next=cpoints.begin();
+       iter=next++;
+       prev_pos=0.0;
+       for (; next!=cpoints.end(); iter++, next++)
                {
-                       Real cm=(*iter).color.get_y();
+                       cm=iter->color.get_y()*((next->pos-iter->pos)/2 - 
prev_pos) ;
                        ret+=cm*cm;
+                       prev_pos = (next->pos-iter->pos)/2;
                }
+               cm=next->color.get_y()*(1.0 - prev_pos);
+               ret+=cm*cm;
        ret=sqrt(ret);
        return ret;
 }


------------------------------------------------------------------------------
Ridiculously easy VDI. With Citrix VDI-in-a-Box, you don't need a complex
infrastructure or vast IT resources to deliver seamless, secure access to
virtual desktops. With this all-in-one solution, easily deploy virtual 
desktops for less than the cost of PCs and save 60% on VDI infrastructure 
costs. Try it free! http://p.sf.net/sfu/Citrix-VDIinabox
_______________________________________________
Synfig-devl mailing list
Synfig-devl@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/synfig-devl

Reply via email to