summaryrefslogtreecommitdiff
path: root/modules/graphics/macros/graypolarplot.sci
diff options
context:
space:
mode:
authorShashank2017-05-29 12:40:26 +0530
committerShashank2017-05-29 12:40:26 +0530
commit0345245e860375a32c9a437c4a9d9cae807134e9 (patch)
treead51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /modules/graphics/macros/graypolarplot.sci
downloadscilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.gz
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.tar.bz2
scilab_for_xcos_on_cloud-0345245e860375a32c9a437c4a9d9cae807134e9.zip
CMSCOPE changed
Diffstat (limited to 'modules/graphics/macros/graypolarplot.sci')
-rwxr-xr-xmodules/graphics/macros/graypolarplot.sci197
1 files changed, 197 insertions, 0 deletions
diff --git a/modules/graphics/macros/graypolarplot.sci b/modules/graphics/macros/graypolarplot.sci
new file mode 100755
index 000000000..328ce7119
--- /dev/null
+++ b/modules/graphics/macros/graypolarplot.sci
@@ -0,0 +1,197 @@
+// Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
+// Copyright (C) INRIA
+// Copyright (C) Samuel GOUGEON - 2013 : vectorization, code style
+//
+// 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
+// are also available at
+// http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt
+
+
+function graypolarplot(theta,rho,z,varargin)
+ [lhs,rhs] = argn(0)
+ if rhs<=0 then
+ rho = 1:0.2:4
+ theta = (0:0.02:1)*2*%pi
+ z = 30+round(theta'*(1+rho.^2))
+ clf()
+ f = gcf()
+ f.color_map = hotcolormap(128)
+ f.background= 128
+ a = gca()
+ a.background = 128
+ a.foreground = 1
+ graypolarplot(theta,rho,z)
+ return
+ end
+
+ if rhs<3 then
+ error(msprintf(gettext("%s: Wrong number of input argument(s): At least %d expected.\n"), "graypolarplot", 3));
+ end
+
+
+ R = max(rho)
+ nv = size(varargin)
+ if nv>=1
+ strf = varargin(2)
+ else
+ strf = "030"
+ end
+ if nv>=2
+ rect = varargin(4)
+ else
+ rect = [-R -R R R]*1.1
+ end
+
+ // drawlater
+ fig = gcf();
+ immediate_drawing = fig.immediate_drawing;
+ fig.immediate_drawing = "off";
+
+ axes = gca();
+ axes.data_bounds = [rect(1), rect(2); rect(3), rect(4)];
+ axes.clip_state = "clipgrf";
+
+ drawGrayplot(theta,rho,z);
+
+ objectList = gce(); // get all the created objects to glue them at the end.
+
+ axes.isoview = "on";
+ axes.box = "off";
+ axes.axes_visible = ["off","off","off"];
+ axes.x_label.text = "";
+ axes.y_label.text = "";
+ axes.z_label.text = "";
+
+ step = R/5
+ r = step;
+ dr = 0.02*r;
+ for k = 1:4
+ xarc(-r, r, 2*r, 2*r, 0, 360*64)
+ objectList($ + 1) = gce();
+ arc = gce();
+ arc.line_style = 3;
+ xstring((r+dr)*cos(5*%pi/12),(r+dr)*sin(5*%pi/12), string(round(10*r)/10))
+ objectList($ + 1) = gce();
+ r=r+step
+ end
+ xarc(-r,r,2*r,2*r,0,360*64)
+ objectList($ + 1) = gce();
+ xstring((r+dr)*cos(5*%pi/12),(r+dr)*sin(5*%pi/12), string(round(10*r)/10))
+ objectList($ + 1) = gce();
+
+ rect = xstringl(0,0,"360");
+ w = rect(3);
+ h = rect(4);
+ r = R*1.05
+ for k = 0:11
+ xsegs([0 ; R*cos(k*(%pi/6))],[0 ; R*sin(k*(%pi/6))])
+ objectList($ + 1) = gce();
+ arc = gce();
+ arc.line_style = 3;
+ xstring((r+w/2)*cos(k*(%pi/6))-w/2, (r+h/2)*sin(k*(%pi/6))-h/2,string(k*30))
+ objectList($ + 1) = gce();
+ end
+
+ // glue all the created objects
+ glue(objectList);
+
+ // drawnow
+ fig.immediate_drawing = immediate_drawing;
+
+endfunction
+// ---------------------------------------------------------------------------
+
+function [x,y] = polar2Cart(rho, theta)
+ x = rho * cos(theta);
+ y = rho * sin(theta);
+endfunction
+// ---------------------------------------------------------------------------
+
+function [nbDecomp] = computeNeededDecompos(theta)
+ // Compute the needed decomposition for each patch
+
+ // minimal decompostion for each ring
+ nbFactesPerRingMin = 512;
+
+ nbDecomp = ceil(nbFactesPerRingMin / size(theta, "*"));
+
+endfunction
+// ---------------------------------------------------------------------------
+function drawGrayplot(theta, rho, z)
+ // draw only the colored part of the grayplot
+
+ // the aim of the function is to draw a set of curved facets
+ // In previous versions, it used arcs to perform this.
+ // However, since arcs are drawn from the origin to the outside
+ // there were overlapping and cause Z fighting in 3D.
+ // Consequenlty we now decompose each curved facet into a set of rectangular
+ // facets.
+
+ nbRho = size(rho,"*");
+ nbTheta = size(theta,"*");
+
+ nbDecomposition = computeNeededDecompos(theta); // number of approximation facets
+
+ // first step decompose theta in smaller intervals
+ // Actually compute cosTheta and sinTheta for speed [vectorized]
+ t = (1:nbDecomposition) / nbDecomposition
+ [I,T] = meshgrid(theta, t)
+ interpolatedData = T(:,2:$).*I(:,2:$) + (1-T(:,1:$-1)).*I(:,1:$-1)
+ cosTheta = [cos(theta(1)) cos(interpolatedData(:))' ]
+ sinTheta = [sin(theta(1)) sin(interpolatedData(:))' ]
+
+ // compute the 4xnbFacets matrices for plot 3d
+ //
+ // get the 4 corners of a facet
+ // (we minimize the memory footprint, since big transient and final matrices
+ // are built)
+ Jmax = size(sinTheta,2)
+
+ [R, C] = meshgrid(rho, cosTheta)
+ R = R.*C
+ clear C
+ corner = R(1:Jmax-1,1:nbRho-1); xCoords = corner(:)'
+ corner = R(2:Jmax ,1:nbRho-1); xCoords(2,:) = corner(:)'
+ corner = R(2:Jmax ,2:nbRho); xCoords(3,:) = corner(:)'
+ corner = R(1:Jmax-1,2:nbRho); xCoords(4,:) = corner(:)'
+
+ [R, S] = meshgrid(rho, sinTheta)
+ R = R.*S
+ clear S
+ corner = R(1:Jmax-1,1:nbRho-1); yCoords = corner(:)'
+ corner = R(2:Jmax ,1:nbRho-1); yCoords(2,:) = corner(:)'
+ corner = R(2:Jmax ,2:nbRho); yCoords(3,:) = corner(:)'
+ corner = R(1:Jmax-1,2:nbRho); yCoords(4,:) = corner(:)'
+ clear R
+
+ // color is the same for each nbDecomposition facets
+ // keep the 4 outside colors of the patch
+ // to be able to switch between average or matlab color.
+ i = 1:nbRho
+ j = (0:Jmax-1)/ nbDecomposition + 1
+ [I, J] = meshgrid(i,j)
+ clear I
+ corner = z(J(1:$-1,1) , 1:$-1); colors = corner(:)'
+ corner = z(J(1:$-1,1)+1, 1:$-1); colors(2,:) = corner(:)'
+ corner = z(J(1:$-1,1)+1, 2:$); colors(3,:) = corner(:)'
+ corner = z(J(1:$-1,1) , 2:$); colors(4,:) = corner(:)'
+ clear J corner
+
+ // flat plot
+ nbQuadFacets = (nbRho - 1) * (Jmax - 1);
+ zCoords = zeros(4, nbQuadFacets);
+
+ // disable line draing and hidden color
+ plot3d(xCoords, yCoords, list(zCoords,colors));
+ gPlot = gce();
+ gPlot.color_mode = -1; // no wireframe
+ gPlot.hiddencolor = 0; // no hidden color
+ gPlot.color_flag = 2; // average color on each facets
+
+ // restore 2d view
+ axes = gca();
+ axes.view = "2d";
+
+endfunction