Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include "plplotP.h"
00025
00026 #define dtr 0.01745329252
00027
00028
00029
00030
00031
00032
00033
00034 void
00035 c_plwind( PLFLT xmin, PLFLT xmax, PLFLT ymin, PLFLT ymax )
00036 {
00037 PLFLT dx, dy, mmxmi, mmxma, mmymi, mmyma;
00038 PLFLT xvpwxmin, xvpwxmax, xvpwymin, xvpwymax;
00039 PLWindow w;
00040
00041 if ( plsc->level < 2 )
00042 {
00043 plabort( "plwind: Please set up viewport first" );
00044 return;
00045 }
00046
00047
00048
00049 if ( xmin == xmax )
00050 {
00051 plwarn( "plwind: Invalid window limits in x." );
00052 xmin--; xmax++;
00053 }
00054 if ( ymin == ymax )
00055 {
00056 plwarn( "plwind: Invalid window limits in y." );
00057 ymin--; ymax++;
00058 }
00059
00060 plsc->vpwxmi = xmin;
00061 plsc->vpwxma = xmax;
00062 plsc->vpwymi = ymin;
00063 plsc->vpwyma = ymax;
00064
00065
00066
00067
00068 plP_xgvpw( &xvpwxmin, &xvpwxmax, &xvpwymin, &xvpwymax );
00069
00070
00071
00072 dx = xvpwxmax - xvpwxmin;
00073 dy = xvpwymax - xvpwymin;
00074
00075 plsc->wpxscl = ( plsc->vppxma - plsc->vppxmi ) / dx;
00076 plsc->wpxoff = ( xmax * plsc->vppxmi - xmin * plsc->vppxma ) / dx;
00077 plsc->wpyscl = ( plsc->vppyma - plsc->vppymi ) / dy;
00078 plsc->wpyoff = ( ymax * plsc->vppymi - ymin * plsc->vppyma ) / dy;
00079
00080 mmxmi = plP_dcmmx( plsc->vpdxmi );
00081 mmxma = plP_dcmmx( plsc->vpdxma );
00082 mmymi = plP_dcmmy( plsc->vpdymi );
00083 mmyma = plP_dcmmy( plsc->vpdyma );
00084
00085
00086
00087 plsc->wmxscl = ( mmxma - mmxmi ) / dx;
00088 plsc->wmxoff = ( xmax * mmxmi - xmin * mmxma ) / dx;
00089 plsc->wmyscl = ( mmyma - mmymi ) / dy;
00090 plsc->wmyoff = ( ymax * mmymi - ymin * mmyma ) / dy;
00091
00092
00093
00094 plsc->wdxscl = plsc->wmxscl * plsc->xpmm / ( plsc->phyxma - plsc->phyxmi );
00095 plsc->wdxoff = plsc->wmxoff * plsc->xpmm / ( plsc->phyxma - plsc->phyxmi );
00096 plsc->wdyscl = plsc->wmyscl * plsc->ypmm / ( plsc->phyyma - plsc->phyymi );
00097 plsc->wdyoff = plsc->wmyoff * plsc->ypmm / ( plsc->phyyma - plsc->phyymi );
00098
00099
00100
00101 w.dxmi = plsc->vpdxmi;
00102 w.dxma = plsc->vpdxma;
00103 w.dymi = plsc->vpdymi;
00104 w.dyma = plsc->vpdyma;
00105
00106 w.wxmi = xvpwxmin;
00107 w.wxma = xvpwxmax;
00108 w.wymi = xvpwymin;
00109 w.wyma = xvpwymax;
00110
00111 plP_swin( &w );
00112
00113
00114
00115 plsc->level = 3;
00116 }
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138 void
00139 c_plw3d( PLFLT basex, PLFLT basey, PLFLT height, PLFLT xmin0,
00140 PLFLT xmax0, PLFLT ymin0, PLFLT ymax0, PLFLT zmin0,
00141 PLFLT zmax0, PLFLT alt, PLFLT az )
00142 {
00143 PLFLT xmin, xmax, ymin, ymax, zmin, zmax, d;
00144 PLFLT cx, cy, saz, caz, salt, calt, zscale;
00145
00146 if ( plsc->level < 3 )
00147 {
00148 plabort( "plw3d: Please set up 2-d window first" );
00149 return;
00150 }
00151 if ( basex <= 0.0 || basey <= 0.0 || height <= 0.0 )
00152 {
00153 plabort( "plw3d: Invalid world coordinate boxsize" );
00154 return;
00155 }
00156 if ( xmin0 == xmax0 || ymin0 == ymax0 || zmin0 == zmax0 )
00157 {
00158 plabort( "plw3d: Invalid axis range" );
00159 return;
00160 }
00161 if ( alt < 0.0 || alt > 90.0 )
00162 {
00163 plabort( "plw3d: Altitude must be between 0 and 90 degrees" );
00164 return;
00165 }
00166
00167 d = 1.0e-5 * ( xmax0 - xmin0 );
00168 xmax = xmax0 + d;
00169 xmin = xmin0 - d;
00170 d = 1.0e-5 * ( ymax0 - ymin0 );
00171 ymax = ymax0 + d;
00172 ymin = ymin0 - d;
00173 d = 1.0e-5 * ( zmax0 - zmin0 );
00174 zmax = zmax0 + d;
00175 zmin = zmin0 - d;
00176 cx = basex / ( xmax - xmin );
00177 cy = basey / ( ymax - ymin );
00178 zscale = height / ( zmax - zmin );
00179 saz = sin( dtr * az );
00180 caz = cos( dtr * az );
00181 salt = sin( dtr * alt );
00182 calt = cos( dtr * alt );
00183
00184 plsc->domxmi = xmin;
00185 plsc->domxma = xmax;
00186 plsc->domymi = ymin;
00187 plsc->domyma = ymax;
00188 plsc->zzscl = zscale;
00189 plsc->ranmi = zmin;
00190 plsc->ranma = zmax;
00191
00192 plsc->base3x = basex;
00193 plsc->base3y = basey;
00194 plsc->basecx = 0.5 * ( xmin + xmax );
00195 plsc->basecy = 0.5 * ( ymin + ymax );
00196
00197
00198
00199
00200
00201
00202
00203
00204
00205
00206
00207
00208
00209
00210
00211
00212
00213
00214
00215
00216
00217
00218
00219
00220
00221
00222
00223
00224
00225
00226
00227
00228
00229
00230
00231
00232
00233
00234 plsc->cxx = cx * caz;
00235 plsc->cxy = -cy * saz;
00236 plsc->cyx = cx * saz * salt;
00237 plsc->cyy = cy * caz * salt;
00238 plsc->cyz = zscale * calt;
00239 plsc->czx = -cx * calt * saz;
00240 plsc->czy = -cy * calt * caz;
00241 plsc->czz = zscale * salt;
00242 }