version 1.3, 2000/08/22 05:04:30 |
version 1.5, 2001/10/09 01:36:27 |
|
|
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* DEVELOPER SHALL HAVE NO LIABILITY IN CONNECTION WITH THE USE, |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* PERFORMANCE OR NON-PERFORMANCE OF THE SOFTWARE. |
* |
* |
* $OpenXM: OpenXM_contrib2/asir2000/plot/calc.c,v 1.2 2000/08/21 08:31:50 noro Exp $ |
* $OpenXM: OpenXM_contrib2/asir2000/plot/calc.c,v 1.4 2001/08/22 09:19:21 noro Exp $ |
*/ |
*/ |
#include "ca.h" |
#include "ca.h" |
|
#include "parse.h" |
#include "ifplot.h" |
#include "ifplot.h" |
#include <math.h> |
#include <math.h> |
#if PARI |
#if PARI |
#include "genpari.h" |
#include "genpari.h" |
#endif |
#endif |
|
|
double usubstrp(P,double); |
void calc(double **tab,struct canvas *can,int nox) |
|
|
void calc(tab,can) |
|
double **tab; |
|
struct canvas *can; |
|
{ |
{ |
double x,y,xmin,ymin,xstep,ystep; |
double x,y,xmin,ymin,xstep,ystep; |
int ix,iy; |
int ix,iy; |
Line 68 struct canvas *can; |
|
Line 65 struct canvas *can; |
|
V vx,vy; |
V vx,vy; |
Obj t,s; |
Obj t,s; |
|
|
initmarker(can,"Evaluating..."); |
if ( !nox ) initmarker(can,"Evaluating..."); |
MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr); |
MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr); |
vx = can->vx; |
vx = can->vx; |
vy = can->vy; |
vy = can->vy; |
Line 79 struct canvas *can; |
|
Line 76 struct canvas *can; |
|
for( ix = 0, x = xmin; ix < w ; ix++, x += xstep ) { |
for( ix = 0, x = xmin; ix < w ; ix++, x += xstep ) { |
#if 0 |
#if 0 |
MKReal(x,r); substp(CO,fr,vx,(P)r,&g); |
MKReal(x,r); substp(CO,fr,vx,(P)r,&g); |
marker(can,DIR_X,ix); |
if ( !nox ) marker(can,DIR_X,ix); |
for( iy = 0, y = ymin; iy < h ; iy++, y += ystep ) |
for( iy = 0, y = ymin; iy < h ; iy++, y += ystep ) |
tab[ix][iy] = usubstrp(g,y); |
tab[ix][iy] = usubstrp(g,y); |
#endif |
#endif |
BDY(rx) = x; substr(CO,0,fr,vx,x?(P)rx:0,&t); devalr(CO,t,&g); |
BDY(rx) = x; substr(CO,0,fr,vx,x?(Obj)rx:0,&t); |
marker(can,DIR_X,ix); |
devalr(CO,t,&g); |
|
if ( !nox ) marker(can,DIR_X,ix); |
for( iy = 0, y = ymin; iy < h ; iy++, y += ystep ) { |
for( iy = 0, y = ymin; iy < h ; iy++, y += ystep ) { |
BDY(ry) = y; |
BDY(ry) = y; |
substr(CO,0,g,vy,y?(P)ry:0,&t); devalr(CO,t,&s); |
substr(CO,0,g,vy,y?(Obj)ry:0,&t); |
|
devalr(CO,t,&s); |
tab[ix][iy] = ToReal(s); |
tab[ix][iy] = ToReal(s); |
} |
} |
} |
} |
} |
} |
|
|
double usubstrp(p,r) |
double usubstrp(P p,double r) |
P p; |
|
double r; |
|
{ |
{ |
double t; |
double t; |
DCP dc; |
DCP dc; |
|
|
return t; |
return t; |
} |
} |
|
|
void qcalc(tab,can) |
void qcalc(char **tab,struct canvas *can) |
char **tab; |
|
struct canvas *can; |
|
{ |
{ |
Q dx,dy,w,h,xstep,ystep,c,q1,q2; |
Q dx,dy,w,h,xstep,ystep,c,q1; |
P g,g1,f1,f2,x,y,t,s; |
P g,g1,f1,f2,x,y,t,s; |
DCP dc; |
|
int ix,iy; |
int ix,iy; |
int *a,*pa; |
int *a,*pa; |
char *px; |
|
VECT ss; |
VECT ss; |
|
|
|
|
Line 147 struct canvas *can; |
|
Line 140 struct canvas *can; |
|
for ( iy = 0; iy < can->height; iy++ ) |
for ( iy = 0; iy < can->height; iy++ ) |
tab[ix][iy] = 1; |
tab[ix][iy] = 1; |
else if ( !NUM(g1) ) { |
else if ( !NUM(g1) ) { |
strum(CO,g1,&ss); seproot(ss,0,can->height,a); |
sturmseq(CO,g1,&ss); seproot(ss,0,can->height,a); |
for ( iy = 0, pa = a; iy < can->height; iy++, pa++ ) |
for ( iy = 0, pa = a; iy < can->height; iy++, pa++ ) |
if ( *pa < 0 || (*(pa+1) >= 0 && (*pa > *(pa+1))) ) |
if ( *pa < 0 || (*(pa+1) >= 0 && (*pa > *(pa+1))) ) |
tab[ix][iy] = 1; |
tab[ix][iy] = 1; |
Line 161 struct canvas *can; |
|
Line 154 struct canvas *can; |
|
for ( ix = 0; ix < can->width; ix++ ) |
for ( ix = 0; ix < can->width; ix++ ) |
tab[ix][iy] = 1; |
tab[ix][iy] = 1; |
else if ( !NUM(g1) ) { |
else if ( !NUM(g1) ) { |
strum(CO,g1,&ss); seproot(ss,0,can->width,a); |
sturmseq(CO,g1,&ss); seproot(ss,0,can->width,a); |
for ( ix = 0, pa = a; ix < can->width; ix++, pa++ ) |
for ( ix = 0, pa = a; ix < can->width; ix++, pa++ ) |
if ( *pa < 0 || (*(pa+1) >= 0 && (*pa > *(pa+1))) ) |
if ( *pa < 0 || (*(pa+1) >= 0 && (*pa > *(pa+1))) ) |
tab[ix][iy] = 1; |
tab[ix][iy] = 1; |
Line 169 struct canvas *can; |
|
Line 162 struct canvas *can; |
|
} |
} |
} |
} |
|
|
strum(vl,p,rp) |
void sturmseq(VL vl,P p,VECT *rp) |
VL vl; |
|
P p; |
|
VECT *rp; |
|
{ |
{ |
P g1,g2,q,r,s; |
P g1,g2,q,r,s; |
P *t; |
P *t; |
|
|
*rp = ret; |
*rp = ret; |
} |
} |
|
|
seproot(s,min,max,ar) |
void seproot(VECT s,int min,int max,int *ar) |
VECT s; |
|
int min,max; |
|
int *ar; |
|
{ |
{ |
P f; |
P f; |
P *ss; |
P *ss; |
|
|
seproot(s,k,j,ar); |
seproot(s,k,j,ar); |
} |
} |
|
|
numch(s,n,a0) |
int numch(VECT s,Q n,Q a0) |
VECT s; |
|
Q n,a0; |
|
{ |
{ |
int len,i,c; |
int len,i,c; |
Q a; |
Q a; |
|
|
return c; |
return c; |
} |
} |
|
|
usubstqp(p,r,v) |
void usubstqp(P p,Q r,Q *v) |
P p; |
|
Q r; |
|
Q *v; |
|
{ |
{ |
Q d,d1,a,b,t; |
Q d,d1,a,b,t; |
DCP dc; |
DCP dc; |
|
|
} |
} |
} |
} |
|
|
void plotcalc(can) |
void plotcalc(struct canvas *can) |
struct canvas *can; |
|
{ |
{ |
double x,xmin,xstep,ymax,ymin,dy; |
double x,xmin,xstep,ymax,ymin,dy; |
int ix; |
int ix; |
Line 324 struct canvas *can; |
|
Line 305 struct canvas *can; |
|
for( ix = 0, x = xmin; ix < w ; ix++, x += xstep ) { |
for( ix = 0, x = xmin; ix < w ; ix++, x += xstep ) { |
/* full substitution */ |
/* full substitution */ |
BDY(rx) = x; |
BDY(rx) = x; |
substr(CO,0,fr,can->vx,x?(P)rx:0,&s); devalr(CO,(Obj)s,&t); |
substr(CO,0,fr,can->vx,x?(Obj)rx:0,&s); |
|
devalr(CO,(Obj)s,&t); |
if ( t && (OID(t)!=O_N || NID((Num)t)!=N_R) ) |
if ( t && (OID(t)!=O_N || NID((Num)t)!=N_R) ) |
error("plotcalc : invalid evaluation"); |
error("plotcalc : invalid evaluation"); |
tab[ix] = ToReal((Num)t); |
tab[ix] = ToReal((Num)t); |
Line 360 struct canvas *can; |
|
Line 342 struct canvas *can; |
|
else if ( t < -MAXSHORT ) |
else if ( t < -MAXSHORT ) |
YC(pa[ix]) = -MAXSHORT; |
YC(pa[ix]) = -MAXSHORT; |
else |
else |
YC(pa[ix]) = t; |
YC(pa[ix]) = (long)t; |
} |
} |
} |
} |