Function:s2surpa

From S2PLOT

Jump to: navigation, search

s2surpa

Draw a colour surface representation of the 2-dimensional array, data, containing nx * ny values.

Prototype

void s2surpa(float **data, int nx, int ny, int i1, int i2, int j1, int j2, float datamin, float datamax, float *tr);

Description

Draw a colour surface representation of the 2-dimensional array, data, containing nx * ny values. A sub-section only of the array is drawn, viz. data[i1:i2][j1:j2]. Data values <= datamin are mapped to the first colour in the colour map (see s2scir), while values >= datamax are mapped to the last entry in the colour map. The mapping is linear at this stage. This function differs to the simpler s2surp in that the tranformation array provides an arbitrary transform, allowing the surface plot to be placed anywhere in the space oriented at any angle, etc. The transformation is as follows:

  • x = tr[0] + tr[1] * i + tr[2] * j + tr[3] * dataval
  • y = tr[4] + tr[5] * i + tr[6] * j + tr[7] * dataval
  • z = tr[8] + tr[9] * i + tr[10]* j + tr[11]* dataval

See Also

s2scir Set the range of colour indices used for shading.
s2surp Draw a colour surface representation of the 2-dimensional array, data, containing nx * ny values.

PGPLOT Equivalent

PGIMAG

Code Example

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "s2plot.h"

#define XLIMIT 10.0
#define YLIMIT 10.0
#define ZLIMIT 10.0
#define TWOPI 6.2831853

#define NX 64
#define NY 64

int main(int argc, char *argv[])
{

   float x1 = -XLIMIT, x2 = XLIMIT;             /* x world coord range */
   float y1 = -YLIMIT, y2 = YLIMIT;             /* y world coord range */
   float z1 = -ZLIMIT, z2 = ZLIMIT;             /* z world coord range */
   int i, j;                                    /* Loop variables */
   float **image;                               /* 2D array for image */
   float minz = 9e30;                           /* Minimum value */
   float maxz = -9e30;                          /* Maximum value */
   float x, y, dx, dy;                          /* Temporary variables */
   float tr[8];                                 /* Transformation matrix */
   float tr2[12];                               /* Transformation matrix */

   s2opend("/?",argc,argv);                     /* Open the display */
   s2swin(x1,x2,y1,y2,z1,z2);                   /* Set the window coordinates */
   s2box("BCDET",0,0,"BCDET",0,0,"BCDET",0,0);  /* Draw coordinate box */

   dx = (x2-x1)/(float)(NX-1);                  /* Spacing in X */
   dy = (y2-y1)/(float)(NY-1);                  /* Spacing in Y */

   image = (float **)calloc(NX, sizeof(float **));      /* Allocate memory */
   for (i=0;i<NX;i++) {
      image[i] = (float *)calloc(NY, sizeof(float *));  /* Allocate memory */
      x = i*dx + x1;
      for (j=0;j<NY;j++) {
         y = j*dy + y1;
         image[i][j] = sqrt(x*x + y*y);			/* Data points */
         minz = (image[i][j] < minz) ? image[i][j] : minz;
         maxz = (image[i][j] > maxz) ? image[i][j] : maxz;
      }
   }

  /* set up a unity transformation matrix */
   tr[0] = x1; tr[1] = (x2-x1)/(float)(NX-1); tr[2] = 0.0;
   tr[3] = y1; tr[4] = 0.0; tr[5] = (y2-y1)/(float)(NY-1);
   tr[6] = z1; tr[7] = (z2-z1)/(maxz-minz);

   s2icm("rainbow", 1000, 1500);                /* Install colour map */
   s2scir(1000, 1500);                          /* Set colour range */

   /* plot surface */
   s2surp(image, NX, NY, 0, NX-1, 0, NY-1, minz, maxz, tr);

   /* plot the same data, but on the base-level z plane, using the
    * more general s2surpa function.  */

   tr2[0] = tr[0]; tr2[1] = tr[1]; tr2[2]  = tr[2]; tr2[3]  = 0.0;
   tr2[4] = tr[3]; tr2[5] = tr[4]; tr2[6]  = tr[5]; tr2[7]  = 0.0;
   tr2[8] = z1;    tr2[9] = 0.0;   tr2[10] = 0.0;   tr2[11] = 0.0;

   /* new colormap and plot */
   s2surpa(image, NX, NY, 0, NX-1, 0, NY-1, minz, maxz, tr2);

   s2show(1);					/* Show the S2PLOT window */

   return 1;

}


Back to S2PLOT function list.


Personal tools