diff options
author | Shashank | 2017-05-29 12:40:26 +0530 |
---|---|---|
committer | Shashank | 2017-05-29 12:40:26 +0530 |
commit | 0345245e860375a32c9a437c4a9d9cae807134e9 (patch) | |
tree | ad51ecbfa7bcd3cc5f09834f1bb8c08feaa526a4 /modules/graphics/macros/graypolarplot.sci | |
download | scilab_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-x | modules/graphics/macros/graypolarplot.sci | 197 |
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 |