43 PLFLT def_arrow_x[6] = { -0.5, 0.5, 0.3, 0.5, 0.3, 0.5 };
44 PLFLT def_arrow_y[6] = { 0.0, 0.0, 0.2, 0.0, -0.2, 0.0 };
52 if ( arrowx == NULL && arrowy == NULL )
60 if ( ( ( plsc->arrow_x = (
PLFLT *) malloc( (
size_t) npts *
sizeof (
PLFLT ) ) ) == NULL ) ||
61 ( ( plsc->arrow_y = (
PLFLT *) malloc( (
size_t) npts *
sizeof (
PLFLT ) ) ) == NULL ) )
63 plexit(
"c_plsvect: Insufficient memory" );
66 plsc->arrow_npts = npts;
67 plsc->arrow_fill = fill;
68 for ( i = 0; i < npts; i++ )
70 plsc->arrow_x[i] = arrowx[i];
71 plsc->arrow_y[i] = arrowy[i];
81 PLFLT uu, vv, px0, py0, dpx, dpy;
86 PLINT *a_x, *a_y = NULL;
92 if ( uu == 0.0 && vv == 0.0 )
95 if ( ( ( a_x = (
PLINT *) malloc(
sizeof (
PLINT ) * (
size_t) ( plsc->arrow_npts ) ) ) == NULL ) ||
96 ( ( a_y = (
PLINT *) malloc(
sizeof (
PLINT ) * (
size_t) ( plsc->arrow_npts ) ) ) == NULL ) )
98 plexit(
"plP_plotvect: Insufficient memory" );
105 pldebug(
"plP_plotvect",
"%f %f %d %d\n", x, y, px0, py0 );
107 TRANSFORM( x + 0.5 * uu, y + 0.5 * vv, &xt, &yt );
114 for ( j = 0; j < plsc->arrow_npts; j++ )
116 a_x[j] = (
PLINT) ( plsc->arrow_x[j] * dpx - plsc->arrow_y[j] * dpy + px0 );
117 a_y[j] = (
PLINT) ( plsc->arrow_x[j] * dpy + plsc->arrow_y[j] * dpx + py0 );
122 if ( plsc->arrow_fill )
124 plP_plfclp( a_x, a_y, plsc->arrow_npts, plsc->clpxmi, plsc->clpxma,
125 plsc->clpymi, plsc->clpyma,
plP_fill );
128 free( (
void *) a_x );
129 free( (
void *) a_y );
146 PLFLT lscale,
dx,
dy, dxmin, dymin, umax, vmax;
153 for ( j = 0; j < ny; j++ )
155 for ( i = 0; i <
nx; i++ )
157 u[i][j] = getuv( i, j, up );
158 v[i][j] = getuv( i, j, vp );
166 if ( nx <= 1 && ny <= 1 )
168 fprintf( stderr,
"plfvect: not enough points for autoscaling\n" );
173 for ( j = 0; j < ny; j++ )
175 for ( i = 0; i <
nx; i++ )
177 for ( j1 = j; j1 < ny; j1++ )
179 for ( i1 = 0; i1 <
nx; i1++ )
181 dx = fabs( x[i1][j1] - x[i][j] );
182 dy = fabs( y[i1][j1] - y[i][j] );
185 dxmin = ( dx < dxmin ) ? dx : dxmin;
189 dymin = ( dy < dymin ) ? dy : dymin;
197 for ( j = 0; j < ny; j++ )
199 for ( i = 0; i <
nx; i++ )
201 umax = ( u[i][j] > umax ) ? u[i][j] : umax;
202 vmax = ( v[i][j] > vmax ) ? v[i][j] : vmax;
205 lscale = 1.5 *
MIN( dxmin / umax, dymin / vmax );
208 scale = -scale * lscale;
216 for ( j = 0; j < ny; j++ )
218 for ( i = 0; i <
nx; i++ )
220 plP_plotvect( x[i][j], y[i][j], u[i][j], v[i][j], scale );
236 nx, ny, scale,
pltr, pltr_data );