41 PLFLT def_arrow_x[6] = { -0.5, 0.5, 0.3, 0.5, 0.3, 0.5 };
42 PLFLT def_arrow_y[6] = { 0.0, 0.0, 0.2, 0.0, -0.2, 0.0 };
50 if ( arrowx == NULL && arrowy == NULL )
58 if ( ( ( plsc->arrow_x = (
PLFLT *) malloc( (
size_t) npts *
sizeof (
PLFLT ) ) ) == NULL ) ||
59 ( ( plsc->arrow_y = (
PLFLT *) malloc( (
size_t) npts *
sizeof (
PLFLT ) ) ) == NULL ) )
61 plexit(
"c_plsvect: Insufficient memory" );
64 plsc->arrow_npts = npts;
65 plsc->arrow_fill =
fill;
66 for ( i = 0; i < npts; i++ )
68 plsc->arrow_x[i] = arrowx[i];
69 plsc->arrow_y[i] = arrowy[i];
79 PLFLT uu, vv, px0, py0, dpx, dpy;
84 PLINT *a_x, *a_y = NULL;
90 if ( uu == 0.0 && vv == 0.0 )
93 if ( ( ( a_x = (
PLINT *) malloc(
sizeof (
PLINT ) * (
size_t) ( plsc->arrow_npts ) ) ) == NULL ) ||
94 ( ( a_y = (
PLINT *) malloc(
sizeof (
PLINT ) * (
size_t) ( plsc->arrow_npts ) ) ) == NULL ) )
96 plexit(
"plP_plotvect: Insufficient memory" );
103 pldebug(
"plP_plotvect",
"%f %f %d %d\n", x, y, px0, py0 );
105 TRANSFORM( x + 0.5 * uu, y + 0.5 * vv, &xt, &yt );
112 for ( j = 0; j < plsc->arrow_npts; j++ )
114 a_x[j] = (
PLINT) ( plsc->arrow_x[j] * dpx - plsc->arrow_y[j] * dpy + px0 );
115 a_y[j] = (
PLINT) ( plsc->arrow_x[j] * dpy + plsc->arrow_y[j] * dpx + py0 );
120 if ( plsc->arrow_fill )
122 plP_plfclp( a_x, a_y, plsc->arrow_npts, plsc->clpxmi, plsc->clpxma,
123 plsc->clpymi, plsc->clpyma,
plP_fill );
126 free( (
void *) a_x );
127 free( (
void *) a_y );
143 PLFLT **u, **v, **x, **y;
144 PLFLT lscale,
dx,
dy, dxmin, dymin, umax, vmax;
151 for ( j = 0; j < ny; j++ )
153 for ( i = 0; i < nx; i++ )
155 u[i][j] = getuv( i, j, up );
156 v[i][j] = getuv( i, j, vp );
164 if ( nx <= 1 && ny <= 1 )
166 fprintf( stderr,
"plfvect: not enough points for autoscaling\n" );
171 for ( j = 0; j < ny; j++ )
173 for ( i = 0; i < nx; i++ )
175 for ( j1 = j; j1 < ny; j1++ )
177 for ( i1 = 0; i1 < nx; i1++ )
179 dx = fabs( x[i1][j1] - x[i][j] );
180 dy = fabs( y[i1][j1] - y[i][j] );
183 dxmin = ( dx < dxmin ) ? dx : dxmin;
187 dymin = ( dy < dymin ) ? dy : dymin;
195 for ( j = 0; j < ny; j++ )
197 for ( i = 0; i < nx; i++ )
199 umax = ( u[i][j] > umax ) ? u[i][j] : umax;
200 vmax = ( v[i][j] > vmax ) ? v[i][j] : vmax;
205 dxmin = dxmin / umax;
213 dymin = dymin / vmax;
219 lscale = 1.5 *
MIN( dxmin, dymin );
222 scale = -scale * lscale;
230 for ( j = 0; j < ny; j++ )
232 for ( i = 0; i < nx; i++ )
234 plP_plotvect( x[i][j], y[i][j], u[i][j], v[i][j], scale );
250 nx, ny, scale,
pltr, pltr_data );