Name: ERASE  1,22
The routine  ERASE clears the screen of a colour graphics system
or of a graphics terminal. In general, this is done by DISINI at
the beginning of a plot.
The call is:  CALL ERASE                           level 1, 2, 3
         or:  void erase ();
Name: GRAF3  6,22
The routine  GRAF3 plots a  3-D axis system  where the Z-axis is
plotted as a colour bar.
The call is:  CALL GRAF3 (XA, XE, XOR, XSTEP, YA, YE, YOR,
                          YSTEP, ZA, ZE, ZOR, ZSTEP)     level 1
         or:  void graf3 (float xa, float xe, float xor, 
                     float xstep, float ya, float ye, float yor,
                     float ystep, float za, float ze, float zor,
                                                   float zstep); 
XA, XE        are the lower and upper limits of the X-axis.
XOR, XSTEP    are the  first X-axis label  and the step  between
              labels.
YA, YE        are the lower and upper limits of the Y-axis.
YOR, YSTEP    are the  first Y-axis label  and the step  between
              labels.
ZA, ZE        are the lower and upper limits of the Z-axis.
ZOR, ZSTEP    are the  first Z-axis label  and the step  between
              labels.
Note:         GRAF3  must be called  from level 1  and  sets the
              level to 3. For furthers Notes, the user is refer-
              red to the routine GRAF.
Name: ZAXIS  7,22
The routine ZAXIS plots a linearly scaled colour bar.  
The call is:  CALL ZAXIS (A, B, OR, STEP, NL, CSTR, IT, NDIR,
                          NX, NY)                  level 1, 2, 3
         or:  void zaxis (float a, float b, float or,
                          float step, int nl, char *cstr, 
                          int it, int ndir, int nx, int ny);   
A, B          are the lower and upper limits of the colour bar.
OR, STEP      are the first label and the step between labels.
NL            is the length  of the colour bar in plot coordina-
              tes.
CSTR          is a character string containing the axis name.
IT            indicates how ticks,  labels and the axis name are
              plotted.  If IT = 0,  they are plotted in a clock-
              wise  direction.  If IT = 1, they are plotted in a
              counter-clockwise direction.
NDIR          defines the direction of the colour bar. If NDIR =
              0, a vertical colour bar will be plotted;  if NDIR
              = 1, a horizontal colour bar will be plotted.
NX, NY        are the plot coordinates of the lower left corner.
Name: ZAXLG  7,22
The routine ZAXLG plots a logarithmically scaled colour bar.
The call is:  CALL ZAXLG (A, B, OR, STEP, NL, CSTR, IT, NDIR,
                          NX, NY)                  level 1, 2, 3
         or:  void zaxlg (float a, float b, float or, 
                          float step, int nl, char *cstr,
                          int it, int ndir, int nx, int ny);   
A, B          are the lower and upper limits of the colour bar.
OR, STEP      are the first label and the step between labels.
NL            is the  length of  the colour bar  in plot coordi-
              nates.
CSTR          is a character string containing the axis name.
IT            indicates how ticks,  labels and the axis name are
              plotted.  If IT = 0,  they are plotted in a clock-
              wise  direction.  If IT = 1, they are plotted in a
              counter-clockwise direction.
NDIR          defines the direction of the colour bar. If NDIR =
              0, a vertical colour bar will be plotted;  if NDIR
              = 1, a horizontal colour bar will be plotted.
NX, NY        are the plot coordinates of the lower left corner.
Name: CURVE3  22
The routine CURVE3 plots three-dimensional data points.
The call is:  CALL CURVE3 (XRAY, YRAY, ZRAY, N)          level 3
         or:  void curve3 (float *xray, float *yray, 
                           float *zray, int n);
XRAY          is an array  containing the  X-coordinates of data
              points.
YRAY          is an array  containing the  Y-coordinates of data
              points.
ZRAY          is an array  containing the  Z-coordinates of data
              points.
N             is the number of data points.
Name: CURVX3  22
The routine CURVX3 plots three-dimensional data points.
The call is:  CALL CURVX3 (XRAY, Y, ZRAY, N)             level 3
         or:  void curvx3 (float *xray, float y, float *zray,
                                                         int n);
XRAY          is an array  containing the  X-coordinates of data
              points.
Y             is the Y-position of a row of data points.
ZRAY          is an array  containing the  Z-coordinates of data
              points.
N             is the number of data points.
Name: CURVY3  22
The routine CURVY3 plots three-dimensional data points.
The call is:  CALL CURVY3 (X, YRAY, ZRAY, N)             level 3
         or:  void curvy3 (float x, float *yray, float *zray,
                                                         int n);
X             is the X-position of a column of data points.
YRAY          is an array  containing the  Y-coordinates of data
              points.
ZRAY          is an array  containing the  Z-coordinates of data
              points.
N             is the number of data points.
Name: CRVMAT  22
The routine  CRVMAT  plots a coloured surface according to a ma-
trix.
The call is:  CALL CRVMAT (ZMAT, IXDIM, IYDIM, IXPTS, IYPTS)
                                                         level 3
         or:  void crvmat (float *zmat[], int ixdim, int iydim,
                                          int ixpts, int iypts);
ZMAT          is a matrix of the  dimension  (IXDIM, IYDIM) con-
              taining Z-coordinates.  The coordinates correspond
              to a linear grid that overlays the axis system. If
              XA, XE, YA and YE  are the axis limits in GRAF3 or
              values defined with the routine SURSZE,  the rela-
              tionship  between  the grid points  and the matrix
              elements can be described by the formula:
              ZMAT(I,J) = F(X,Y)  where
                   X = XA + (I - 1) * (XE - XA) / (IXDIM - 1)
                   Y = YA + (J - 1) * (YE - YA) / (IYDIM - 1).
IXDIM, IYDIM  define the dimension of ZMAT (>= 2).
IXPTS, IYPTS  is the number of interpolation steps between  grid
              lines (>= 1).  CRVMAT can interpolate points line-
              arly.
Name: SETRES  22
SETRES defines the size of rectangles plotted by CURVE3,  CURVY3
and CRVMAT.
The call is:  CALL SETRES (NPB, NPH)               level 1, 2, 3
         or:  void setres (int npb, int nph);
NPB, NPH      are the width and height of rectangles in plot co-
              ordinates (> 0).                   Default: (1,1).
Name: AUTRES  22
With a call to  AUTRES,  the size of coloured rectangles will be
automatically calculated by GRAF3 or CRVMAT.
The call is:  CALL AUTRES (IXDIM, IYDIM)                 level 1
         or:  void autres (int ixdim, int iydim);
IXDIM, IYDIM  are the  number  of data points  in the  X- and Y-
              direction.
Name: SETCLR  22
The routine SETCLR defines the colour used for text and lines.
The call is:  CALL SETCLR (NCOL)                   level 1, 2, 3
         or:  void setclr (int ncol);
NCOL          is a colour number in the range 0 to 255.
                                    Default: NCOL = 255 (White).
Name: SETRGB  22
The routine  SETRGB defines the  foreground colour specified  in
RGB  coordinates.  SETRGB sets  the nearest entry  in the colour 
table that matches the RGB coordinates. This means that a colour
will not be defined exactly if it is not contained in the colour
table.
 
The call is:  CALL SETRGB (XR, XG, XB)             level 1, 2, 3
         or:  void setrgb (float xr, float xg, float xb);
XR, XG, XB    are the RGB coordinates  of a  colour in the range
              0 to 1.
Name: AX3LEN  22
The routine  AX3LEN  defines the axis lengths of a coloured axis
system.
The call is:    CALL AX3LEN (NXL, NYL, NZL)              level 1
         or:    void ax3len (int nxl, int yl, int nzl);
NXL, NYL, NZL   are the axis lengths in plot coordinates.
Name: WIDBAR  22
The routine WIDBAR defines the width of the colour bar.
The call is:  CALL WIDBAR (NZB)                    level 1, 2, 3
         or:  void widbar (int nzb);
NZB           is the width in plot coordinates. Default NZB = 85
Name: VKXBAR  22
The routine VKXBAR defines horizontal  shifting of  colour bars.
The distance  between the colour bar and the axis system is,  by
default, 85 plot coordinates.
The call is:  CALL VKXBAR (NVFX)                   level 1, 2, 3
         or:  void vkxbar (int nvfx);
NVFX          is an integer  that defines the shifting.  If NVFX
              is positive, the colour bar will be shifted right;
              if NVFX is negative the colour bar will be shifted
              left.                            Default: NVFX = 0
Name: VKYBAR  22
This routine VKYBAR defines a vertical shifting of colour bars.
The call is:  CALL VKYBAR (NVFY)                   level 1, 2, 3
         or:  void nkybar (int nvfy);
NVFY          is an integer  that defines the shifting.  If NVFY
              is positive, the colour bar will be shifted up; if
              NVFY is negative,  the colour bar  will be shifted
              down.                            Default: NVFY = 0
Name: NOBAR   22
The routine  NOBAR instructs  DISLIN to suppress the plotting of
colour bars.
The call is:  CALL NOBAR                           level 1, 2, 3
         or:  void nobar ();
Name: COLRAN  22
The routine defines  the range of colours  used for colour bars.
By default, the range is 1 to 254.
The call is:  CALL COLRAN (NCA, NCE)               level 1, 2, 3
         or:  void colran (int nca, int nce);
NCA, NCE      are colour numbers in the range 1 to 254.
                                              Default: (1, 254).
Name: NOBGD   22
With a call to the routine  NOBGD,  the plotting  of points with
the colour 0 will be suppressed. This reduces plotting  time and
the size of plotfiles.
The call is:  CALL NOBGD                           level 1, 2, 3
         or:  void nobgd ();
Name: SETVLT  22
SETVLT selects a colour table.
The call is:  CALL SETVLT (CVLT)                   level 1, 2, 3
         or:  void setvlt (char *cvlt);
CVLT          is a  character  string  that  defines  the colour
              table.
  = 'SMALL'   defines a small colour table with the 8 colours:
              1 = BLACK, 2 = RED,  3 =  GREEN,  4 = BLUE,  
              5 = YELLOW, 6 = ORANGE, 7 = CYAN and 8 = MAGENTA.
  = 'VGA'     defines the  16 standard colours of a VGA graphics
              card. 
  = 'RAIN'    defines  256 colours arranged  in a rainbow  where
              0 means black and 255 means white.
  = 'SPEC'    defines  256 colours arranged  in a rainbow  where
              0  means black  and  255 means white.  This colour
              table uses more violet colours than 'RAIN'.
  = 'GREY'    defines 256 grey scale colours where 0 means black
              and 255 is white.
  = 'RRAIN'   is the reverse colour table of 'RAIN'.
  = 'RSPEC'   is the reverse colour table of 'SPEC'.
  = 'RGREY'   is the reverse colour table of 'GREY'.
              The  default  colour  table for a  PostScript file
              created  with  the keyword  'POST'  in  METAFL  is
              'RGREY'  and otherwise 'RAIN'.
Name: MYVLT   22
The routine MYVLT changes the current colour table.
The call is:  CALL MYVLT (XR, XG, XB, N)        level 0, 1, 2, 3
         or:  void myvlt (float *xr, float * xg, float *xb,
                                                          int n)
XR, XG, XB    are arrays containing RGB coordinates in the range
              0 to 1.   
N             is the number of colour entries.
Note:         MYVLT can also be called before DISINI.
Name: SETIND  22
The routine  SETIND allows the user to change the current colour
table.
The call is:  CALL SETIND (INDEX, XR, XG, XB)      level 1, 2, 3
         or:  void setind (int index, float xr, float xg, 
                                                      float xb);
INDEX         is an index between  0 and 255.
XR, XG, XB    are the RGB coordinates of a colour in the range 0
              to 1.
Name: HSVRGB  22
The routine HSVRGB converts HSV coordinates to RGB coordinates.
The call is:  CALL HSVRGB (XH, XS, XV, XR, XG, XB) level 1, 2, 3
         or:  void hsvrgb (float  xh, float  xs, float  xv,
                           float *xr, float *xg, float *xb);  
XH, XS, XV    are the hue, saturation and value of a colour.  XH
              must be in the range 0 to 360 degrees while XS and
              XV can have values  between  0 and 1.  In the  HSV
              model,  colours lie  in a spectral order on a six-
              sided pyramid  where red corresponds  to the angle
              0, green to 120 and blue to 240 degrees.
XR, XG, XB    are the RGB coordinates in the range 0 to 1 calcu-
              lated by HSVRGB.
Name: RGBHSV  22
The routine RGBHSV converts RGB coordinates to HSV coordinates.
The call is:  CALL RGBHSV (XR, XG, XB, XH, XS, XV) level 1, 2, 3
         or:  void rgbhsv (float  xr, float  xg, float  xb,
                           float *xh, float *xs, float *xv);
XR, XG, XB    are the RGB coordinates in the range 0 to 1
XH, XS, XV    are the HSV coordinates calculated by RGBHSV  (see
              also HSVRGB).
Name: REVSCR  22
The routine  REVSCR exchanges the colours with the indices 0 and
255.
The call is:  CALL REVSCR                          level 1, 2, 3
         or:  void revscr ();
Name: EXPZLB  22
The routine  EXPZLB  expands the numbering of a  logarithmically
scaled  Z-axis  to the next order of  magnitude that  lies up or
down the axis limits. The scaling of the  colour bar will not be
changed.  This routine  is useful  if the range  of  the  Z-axis
scaling is smaller  than 1
order of magnitude.
The call is:  CALL EXPZLB (CSTR)                   level 1, 2, 3
         or:  void expzlb (char *cstr);
CSTR          is a  character string  defining  the expansion of
              the Z-axis numbering.
  = 'NONE'    means that the numbering will not be expanded.
  = 'FIRST'   means that  the numbering  will  be expanded down-
              wards.
  = 'BOTH'    means that  the numbering  will be expanded  down-
              and upwards.
                                         Default: CSTR = 'NONE'.
Name: IMGINI  26
The routine  IMGINI  initializes transfering  of image data with
the routines RPIXLS, RPXROW, WPIXLS and WPXROW.
The call is:  CALL IMGINI                          level 1, 2, 3
         or:  void imgini ();
Name: IMGFIN  26
The routine IMGFIN terminates transfering of image data with the
routines RPIXLS, RPXROW, WPIXLS and WPXROW.
The call is:  CALL IMGFIN                          level 1, 2, 3
         or:  void imgfin ();
Name: RPXROW  26
The routine  RPXROW copies one line of colour values from memory
to an array.
The call is:  CALL RPXROW (IRAY, IX, IY, N)        level 1, 2, 3
         or:  void rpxrow (unsigned char *iray, int ix, int iy,
                                                          int n)
IRAY          is an  byte array  containing the returned  colour
              values.
IX, IY        contain the starting point in screen coordinates.
N             is the number of image data.
Note:         IMGINI and IMGFIN must be used with RPXROW.
Name: WPXROW  26
The routine  WPXROW copies colour values from an array to a line
in memory.
The call is:  CALL WPXROW (IRAY, IX, IY, N)        level 1, 2, 3
         or:  void wpxrow (unsigned char *iray, int ix, int iy,
                                                          int n)
IRAY          is an byte array containing the colour values.
IX, IY        contain the starting point in screen coordinates.
N             is the number of image data.
Note:         IMGINI and IMGFIN must be used with WPXROW.
Name: RPIXEL  26
The routine RPIXEL reads one pixel from memory.
The call is:  CALL RPIXEL (IX, IY, ICLR)           level 1, 2, 3
         or:  void rpixel (int ix, int iy, int *iclr);
IX, IY        is  the position  of the pixel in screen coordina-
              tes.
ICLR          is the returned colour value of the pixel.
Name: RPIXLS  26
The routine RPIXLS copies colour values from a rectangle in  me-
mory to an array.
The call is:  CALL RPIXLS (IRAY, IX, IY, NW, NH)   level 1, 2, 3
         or:  void rpixls (unsigned char *iray, int ix, int iy,
                           int nw, int nh);
IRAY          is a byte array containing the returned colour va-
              lues.
IX, IY        contain the starting point in screen coordinates.
NW, NH        are  the  width  and  height  of  the rectangle in
              screen coordinates.
Note:         IMGINI and IMGFIN must be used with RPIXLS.
Name: WPIXEL  26
The routine WPIXEL writes one pixel into memory.
The call is:  CALL WPIXEL (IX, IY, ICLR)           level 1, 2, 3
         or:  void wpixel (int ix, int iy, int iclr);
IX, IY        is the  position  of the pixel in screen coordina-
              tes.
ICLR          is the new colour value of the pixel.
Name: WPIXLS  26
The routine  WPIXLS copies colour values from an array to a rec-
tangle in memory.
The call is:  CALL WPIXLS (IRAY, IX, IY, NW, NH)   level 1, 2, 3
         or:  void wpixls (unsigned char *iray, int ix, int iy,
                           int nw, int nh);
IRAY          is a byte array containing the colour values.
IX, IY        contain the starting point in screen coordinates.
NW, NH        are  the  width  and  height  of  the rectangle in
              screen coordinates.
Note:         IMGINI and IMGFIN must be used with WPIXLS.
Name: RIMAGE  26
The routine RIMAGE copies an image from memory to a file.
The call is:  CALL RIMAGE (CFIL)                   level 1, 2, 3
         or:  void rimage (char *cfil);                  
CFIL          is the name of the outout file. A new file version
              will be created for existing files (see FILMOD).
Note:         The fileformat in METAFL must be 'CONS' or 'XWIN'. 
Name: WIMAGE  26
The routine WIMAGE copies an image from a file to memory.
The call is:  CALL WIMAGE (CFIL)                   level 1, 2, 3
         or:  void wimage (char *cfil);                  
CFIL          is the name of the input file.
Note:         The fileformat in METAFL must be 'CONS' or 'XWIN'. 
Name: RTIFF  26
The routine  RTIFF  copies an image  from memory to a file.  The
image is stored in the device-independent TIFF format.
The call is:  CALL RTIFF (CFIL)                    level 1, 2, 3
         or:  void rtiff (char *cfil);                  
CFIL          is the name of the outout file. A new file version
              will be created for existing files (see FILMOD).
Notes:      - This  image  format  can be used  to export images
              created with  DISLIN  into other software packages
              or to transfer to other computer systems.
            - A  TIFF file created by  DISLIN  can be  displayed
              with the routine WTIFF or with the utility program
              DISTIF.
Name: WTIFF  26
The routine WTIFF copies a  TIFF file created by DISLIN to memo-
ry.
The call is:  CALL WTIFF (CFIL)                    level 1, 2, 3
         or:  void wtiff (char *cfil);                  
CFIL          is the name of the input file.
Note:         The position of the  TIFF file and a clipping win-
              dow can be defined  with the routines  TIFORG  and
              TIFWIN.
Name: TIFORG  26
The routine  TIFORG  defines the upper left corner of the screen
where the TIFF file is copied to.
The call is:  CALL TIFORG (NX, NY)                 level 1, 2, 3

NX, NY        is the upper left corner  in screen  coordinates.
Name: TIFWIN  26
The routine  TIFWIN  defines a clipping window  of the TIFF file
that  can be copied with the routine WTIFF to the screen.
The call is:  CALL TIFWIN (NX, NY, NW, NH)         level 1, 2, 3
NX, NY        is the upper left corner of the clipping window in
              pixels.
NW, NH        are the width and height of the clipping window in
              pixels.
Name: RPNG  26
The routine RPNG copies an image from memory to a PNG file.
The call is:  CALL RPNG (CFIL)                     level 1, 2, 3
         or:  void rpng (char *cfil); 
CFIL          is the name of the output file. A new file version
              will be  created for existing files (see FILMOD).
Name: OPNWIN  27
The routine OPNWIN creates a new  window for  graphics output on
the screen.
The call is:  CALL OPNWIN (ID)                     level 1, 2, 3
         or:  void opnwin (int id); 
ID            is the  window number  between 1 and 5.  Normally,
              window 1  will be created in the  lower right cor-
              ner, window 2 in the upper right corner,  window 3 
              in the upper  left corner,  window 4 in the  lower
              left corner  and window 5  in the  center  of  the
              screen. 
Notes:      - The fileformat  must be set to  X window emulation
              in the  routine  METAFL   (i.e.  with the  keyword
              'XWIN').
            - The size  and position  of windows  can be changed
              with the routines WINDOW and WINSIZ.
            - Windows can be closed and selected with  the  rou-
              tines CLSWIN and SELWIN.
            - A created window with  OPNWIN is automatically se-
              lected for graphics output.
Name: CLSWIN  27
The routine CLSWIN closes a window created with OPNWIN.
The call is:  CALL CLSWIN (ID)                     level 1, 2, 3
         or:  void clswin (int id); 
ID            is the window number between 1 and 5.
Name: SELWIN  27
The routine SELWIN selects a window on the screen where the fol-
lowing graphics output will be sent to. 
The call is:  CALL SELWIN (ID)                     level 1, 2, 3
         or:  void selwin (int id); 
ID            is the window number between 1 and 5.
Name: WINID   27
The routine  WINID returns the ID of the currently selected win-
dow.
The call is:  CALL WINID (ID)                      level 1, 2, 3
         or:  int winid (); 
ID            is the returned window number between 1 and 5.
Name: WINTIT  27
The routine  WINTIT  changes the window title  of the  currently
selected window. 
The call is:  CALL WINTIT (CSTR)                   level 1, 2, 3
         or:  void wintit (char *cstr); 
CSTR          is a  character string  containing  the new window
              title.
Name: RECFLL  22
The routine RECFLL plots a coloured rectangle where the position
is determined by the upper left corner.
The call is:  CALL RECFLL (NX, NY, NB, NH, NCOL)   level 1, 2, 3
         or:  void recfll (int nx, int ny, int nb, int nh,
                                                      int ncol);
NX, NY        are the plot coordinates of the upper left corner.
NB, NH        are the width and height in plot coordinates.
NCOL          is a colour index in the range 0 to 255.
Name: POINT   22
The routine  POINT plots a coloured rectangle where the position
is determined by the centre.
The call is:  CALL POINT (NX, NY, NB, NH, NCOL)    level 1, 2, 3
         or:  void point (int nx, int ny, int nb, int nh, 
                                                      int ncol);
NX, NY        are the plot coordinates of the centre point.
NB, NH        are the width and height in plot coordinates.
NCOL          is a colour index in the range 0 to 255.
Name: RLPOIN  22
The routine RLPOIN plots a coloured rectangle where the position
is specified in user coordinates.
The call is: CALL RLPOIN (X, Y, NB, NH, NCOL)         level 2, 3
         or: void rlpoin (float x, float y, int nb, int nh, 
                                                      int ncol);
Note:        RLPOIN clips  rectangles at the borders  of an axis
             system.
Name: SECTOR  22
The routine SECTOR plots coloured pie sectors.     level 1, 2, 3
The call is:  CALL SECTOR (NX, NY, NR1, NR2, ALPHA, BETA,NCOL)
         or:  void sector (int nx, int ny, int nr1, int nr2,
                           float alpha, float beta, int ncol);
NX, NY        are the plot coordinates of the centre point.
NR1           is the interior radius.
NR2           is the exterior radius.
ALPHA, BETA   are the start and  end angles  measured in degrees
              in a counter-clockwise direction.
NCOL          is a colour index between 0 and 255.
Example:      CALL SECTOR  (100,  100,  0,  50,  0., 360., NCOL)
              plots a circle  around the centre  (100,100)  with
              the radius 10 and the colour NCOL.
Name: RLSEC   22
The routine  RLSEC  plots coloured pie sectors  where the centre
and the radii are specified in user coordinates.
The call is:  CALL RLSEC (X, Y, R1, R2, ALPHA, BETA, NCOL)
                                                      level 2, 3
         or:  void rlsec (float x, float y, float r1, float r2,
                           float alpha, float beta, int ncol);
X, Y          are the user coordinates of the centre point.
R1            is the interior radius.
R2            is the exterior radius.
ALPHA, BETA   are the  start and  end angles measured in degrees
              in a counter-clockwise direction.
NCOL          is a colour index between 0 and 255.
Notes:      - For the conversion of the radii  to plot coordina-
              tes, the scaling of the X-axis is used.
            - Sectors  plotted by  RLSEC  will not be cut off at
              the borders of an axis system.
Name: NZPOSN  22
The function NZPOSN converts a Z-coordinate to a colour number.
The call is:  ICLR = NZPOSN (Z)                          level 3
         or:  int    nzposn (float z);
Note:         If  Z  lies  outside  of the axis limits  and Z is
              smaller  than the lower limit,  NZPOSN returns the
              value 0 and the routine returns the  value 255  if
              Z is greater than the upper limit.
Name: COLRAY  22
The routine COLRAY converts an array of Z-coordinates  to colour
values.
The call is:  CALL COLRAY (ZRAY, NRAY, N)                level 3
         or:  void colray (float *zray, int *nray, int n);
ZRAY          is an array of Z-coordinates.
NRAY          is an array of colour  numbers  calculated by COL-
              RAY.
N             is the number of coordinates.
