# Function:s2funuva

## s2funuva

Plot a parametric function (generally a surface) defined by functions fx(u,v), fy(u,v) and fz(u,v) with transparency.

## Prototype

```void s2funuva(float(*fx)(float*, float*), float(*fy)(float*, float*), float(*fz)(float*, float*), float(*fcol)(float*,float*), char trans, float(*falpha)(float*, float*), float umin, float umax, int uDIV, float vmin, float vmax, int vDIV); ```

## Description

Plot the parametric function (generally a surface) defined by { (fx(u,v), fy(u,v), fz(u,v) }, coloured by fcol(u,v) with fcol required to fall in the range [0,1]. fcol is then mapped to the current colormap index range (set with s2scir). Transparency is applied to the surface with falpha(u,v), defining the opacity in the range [0,1]. The range of u and v values are specified by umin,umax and vmin, vmax, and the number of divisions by uDIV and vDIV.

For a constant opacity, implement falpha(u,v){return const_value;}.

 s2scir Set the range of colour indices used for shading. s2funuv Plot a parametric function.

## Code Example

```#include <stdio.h> #include <stdlib.h> #include <math.h> #include "s2plot.h" #define LIMIT 0.7 #define pi 3.14159265359 /* amplitude, number of twists, major radius, minor radius */ #define AMP 0.4 /* Amplitude */ #define NTW 1.5 /* Number of twists */ #define R1 2.0 /* Major radius */ #define R2 0.5 /* Minor radius */ /* Parametric functions for surface */ inline float tkx(float *u, float *v) { return R2 * cos(*v) * cos(*u) + R1 * cos(*u) * (1. + AMP * cos(*u * NTW)); } inline float tky(float *u, float *v) { return R2 * sin(*v) + AMP * sin(*u * NTW); } inline float tkz(float *u, float *v) { return R2 * cos(*v) * sin(*u) + R1 * sin(*u) * (1. + AMP * cos(*u * NTW)); } inline float fcol(float *u, float *v) { return 0.5 + sin(0.5 * *u) * AMP * sin(*v); } inline float falpha(float *u, float *v) { if ((*v) < pi) return 0.0; else return 1.0; } int main(int argc, char *argv[]) { float x1 = -LIMIT, x2 = LIMIT; /* x world coord range */ float y1 = -LIMIT, y2 = LIMIT; /* y world coord range */ float z1 = -LIMIT, z2 = LIMIT; /* z world coord range */ char trans = 't'; /* Transparency type */ s2opend("/?",argc, argv); /* Open the display */ s2swin(x1, x2, y1, y2, z1, z2); /* Set the window coordinates */ s2icm("rainbow", 100, 500); /* Install colour map */ s2scir(100, 500); /* Set colour range */ s2funuva(tkx, tky, tkz, fcol, trans, falpha, 0., 4.*pi, 320, 0., 2.*pi, 90); /* call the parametric surface function */ s2show(1); /* Open the s2plot window */ return 1; } ```

Back to S2PLOT function list.