graphics: bug 9270 fixed - The contour function was broken. 26/3826/2
Michael Baudin [Fri, 15 Apr 2011 09:52:47 +0000 (11:52 +0200)]
Change-Id: I83da4acb023368c8f630c97e962a106a5850ef5e

scilab/CHANGES_5.3.X
scilab/modules/graphics/macros/contour.sci
scilab/modules/graphics/macros/contour2d.sci
scilab/modules/graphics/tests/unit_tests/contour.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/unit_tests/contour.tst [new file with mode: 0644]
scilab/modules/graphics/tests/unit_tests/contour2d.dia.ref [new file with mode: 0644]
scilab/modules/graphics/tests/unit_tests/contour2d.tst [new file with mode: 0644]

index ae4b413..2b52120 100644 (file)
@@ -242,6 +242,8 @@ Bug fixes:
 
 * bug 9300 fixed - Scilab crashed when one tryed to complete an empty mlist.
 
+* bug 9270 fixed - The contour function was broken.
+
 
             Changes between version 5.3.0 and 5.3.1 of Scilab
             =================================================
index 680157e..7522397 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
@@ -97,7 +98,7 @@ function contour(x,y,z,nz,theta,alpha,leg,flag,ebox,zlev)
     k=k+n+1;
   end
   if cnt>0 then glue(a.children(1:cnt)),cnt=0,end
-  set('current_obj',a);
+  set('current_entity',a);
   a.foreground=fg
   if flag(3) == 0 then
     a.axes_visible='off';
index 111e722..a4a3c8c 100644 (file)
@@ -1,5 +1,6 @@
 // Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
 // Copyright (C) INRIA
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
 // This file must be used under the terms of the CeCILL.
 // This source file is licensed as described in the file COPYING, which
 // you should have received as part of this distribution.  The terms
@@ -130,7 +131,7 @@ end
 
 
  if cnt>0 then glue(a.children(1:cnt)),cnt=0,end
- set('current_obj',a);
+ set('current_entity',a);
  fig.immediate_drawing=v;
  fig.auto_clear=autoc;
  draw(fig)
diff --git a/scilab/modules/graphics/tests/unit_tests/contour.dia.ref b/scilab/modules/graphics/tests/unit_tests/contour.dia.ref
new file mode 100644 (file)
index 0000000..02cb29c
--- /dev/null
@@ -0,0 +1,39 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+//
+// Test #1
+h = scf();
+contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11]);
+// changing the format of the printing of the levels
+xset("fpf","%.2f")
+clf()
+contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11])
+ ans  =
+    0.8244035    0.6602663    0.4961290    0.3319918    0.1678546  
+close(h);
+//
+// Test #2
+// now an example with level numbers drawn in a legend
+// Caution there are a number of tricks...
+x = linspace(0,4*%pi,80);
+z = cos(x')*cos(x);
+h = scf();
+f=gcf();
+xset("fpf"," ")  // trick 1: this implies that the level numbers are not
+                 //          drawn on the level curves
+f.color_map=jetcolormap(7);
+// trick 2: to be able to put the legend on the right without
+//          interfering with the level curves use rect with a xmax
+//          value large enough 
+contour2d(x,x,z,-0.75:0.25:0.75,frameflag=3,rect=[0,0,5*%pi,4*%pi]);
+// trick 3: use legends (note that the more practical legend function
+//          will not work as soon as one of the level is formed by 2 curves)  
+legends(string(-0.75:0.25:0.75),1:7,"lr");
+xtitle("Some level curves of the function cos(x)cos(y)");
+close(h);
diff --git a/scilab/modules/graphics/tests/unit_tests/contour.tst b/scilab/modules/graphics/tests/unit_tests/contour.tst
new file mode 100644 (file)
index 0000000..141a067
--- /dev/null
@@ -0,0 +1,38 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+//
+// Test #1
+h = scf();
+contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11]);
+// changing the format of the printing of the levels
+xset("fpf","%.2f")
+clf()
+contour2d(1:10,1:10,rand(10,10),5,rect=[0,0,11,11])
+close(h);
+//
+// Test #2
+// now an example with level numbers drawn in a legend
+// Caution there are a number of tricks...
+x = linspace(0,4*%pi,80);
+z = cos(x')*cos(x);
+h = scf();
+f=gcf();
+xset("fpf"," ")  // trick 1: this implies that the level numbers are not
+                 //          drawn on the level curves
+f.color_map=jetcolormap(7);
+// trick 2: to be able to put the legend on the right without
+//          interfering with the level curves use rect with a xmax
+//          value large enough 
+contour2d(x,x,z,-0.75:0.25:0.75,frameflag=3,rect=[0,0,5*%pi,4*%pi]);
+// trick 3: use legends (note that the more practical legend function
+//          will not work as soon as one of the level is formed by 2 curves)  
+legends(string(-0.75:0.25:0.75),1:7,"lr");
+xtitle("Some level curves of the function cos(x)cos(y)");
+close(h);
diff --git a/scilab/modules/graphics/tests/unit_tests/contour2d.dia.ref b/scilab/modules/graphics/tests/unit_tests/contour2d.dia.ref
new file mode 100644 (file)
index 0000000..9709485
--- /dev/null
@@ -0,0 +1,44 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+// <-- TEST WITH GRAPHIC -->
+//
+// Test #0: the demo
+h = scf();
+contour ( );
+close(h);
+//
+// Test #1: use a function
+function [ f , g , H ] = rosenbrock ( x )
+    f = 100.0 *( x (2) - x (1)^2)^2 + (1 - x (1))^2;
+endfunction
+function f = rosenbrockC ( x1 , x2 )
+    f = rosenbrock ( [x1 , x2 ]' )
+endfunction
+xdata = linspace ( -2 , 2 , 100 );
+ydata = linspace ( -1 , 2 , 100 );
+h = scf();
+contour ( xdata , ydata , rosenbrockC , [2 10 100 500 1000 2000] );
+close(h);
+//
+// Test #2: use a function
+t=linspace(-%pi,%pi,30);
+function z=my_surface(x, y)
+   z=x*sin(x)^2*cos(y)
+endfunction
+h = scf();
+contour(t,t,my_surface,10)
+// changing the format of the printing of the levels
+xset("fpf","%.1f")
+clf()
+contour(t,t,my_surface,10)
+close(h);
+//
+// Test #3: use data
+h = scf();
+z=feval(t,t,my_surface);
+contour(t,t,z+0.2*abs(z),20,flag=[0 2 4]);
+close(h);
diff --git a/scilab/modules/graphics/tests/unit_tests/contour2d.tst b/scilab/modules/graphics/tests/unit_tests/contour2d.tst
new file mode 100644 (file)
index 0000000..f082429
--- /dev/null
@@ -0,0 +1,49 @@
+// =============================================================================
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) 2011 - DIGITEO - Michael Baudin
+//
+//  This file is distributed under the same license as the Scilab package.
+// =============================================================================
+
+// <-- TEST WITH GRAPHIC -->
+
+//
+// Test #0: the demo
+h = scf();
+contour ( );
+close(h);
+//
+// Test #1: use a function
+function [ f , g , H ] = rosenbrock ( x )
+    f = 100.0 *( x (2) - x (1)^2)^2 + (1 - x (1))^2;
+endfunction
+
+function f = rosenbrockC ( x1 , x2 )
+    f = rosenbrock ( [x1 , x2 ]' )
+endfunction
+
+xdata = linspace ( -2 , 2 , 100 );
+ydata = linspace ( -1 , 2 , 100 );
+h = scf();
+contour ( xdata , ydata , rosenbrockC , [2 10 100 500 1000 2000] );
+close(h);
+//
+// Test #2: use a function
+t=linspace(-%pi,%pi,30);
+function z=my_surface(x, y)
+   z=x*sin(x)^2*cos(y)
+endfunction
+
+h = scf();
+contour(t,t,my_surface,10)
+// changing the format of the printing of the levels
+xset("fpf","%.1f")
+clf()
+contour(t,t,my_surface,10)
+close(h);
+//
+// Test #3: use data
+h = scf();
+z=feval(t,t,my_surface);
+contour(t,t,z+0.2*abs(z),20,flag=[0 2 4]);
+close(h);