[BACK]Return to calc.c CVS log [TXT][DIR] Up to [local] / OpenXM_contrib2 / asir2000 / plot

Diff for /OpenXM_contrib2/asir2000/plot/calc.c between version 1.11 and 1.13

version 1.11, 2014/06/27 07:58:29 version 1.13, 2017/09/04 01:57:53
Line 45 
Line 45 
  * 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.10 2014/05/12 16:54:40 saito Exp $   * $OpenXM: OpenXM_contrib2/asir2000/plot/calc.c,v 1.12 2017/08/31 04:21:48 noro Exp $
 */  */
 #include "ca.h"  #include "ca.h"
 #include "parse.h"  #include "parse.h"
Line 68  void calc(double **tab,struct canvas *can,int nox){
Line 68  void calc(double **tab,struct canvas *can,int nox){
         Obj fr,g,t,s;          Obj fr,g,t,s;
   
         if(!nox)initmarker(can,"Evaluating...");          if(!nox)initmarker(can,"Evaluating...");
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         xstep=(can->xmax-can->xmin)/can->width;          xstep=(can->xmax-can->xmin)/can->width;
         ystep=(can->ymax-can->ymin)/can->height;          ystep=(can->ymax-can->ymin)/can->height;
         MKReal(1.0,rx); MKReal(1.0,ry); // dummy real          MKReal(1.0,rx); MKReal(1.0,ry); // dummy real
Line 101  void calcq(double **tab,struct canvas *can,int nox){
Line 101  void calcq(double **tab,struct canvas *can,int nox){
         Obj fr,gm,t,s;          Obj fr,gm,t,s;
         Real r,rx,ry;          Real r,rx,ry;
   
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         MKReal(1.0,rx); MKReal(1.0,ry); // dummy real          MKReal(1.0,rx); MKReal(1.0,ry); // dummy real
         BDY(rx)=can->xmin;          BDY(rx)=can->xmin;
         substr(CO,0,fr,can->vx,can->xmin?(Obj)rx:0,&t); devalr(CO,t,&gm);          substr(CO,0,fr,can->vx,can->xmin?(Obj)rx:0,&t); devalr(CO,t,&gm);
Line 139  void calcb(double **tab,struct canvas *can,int nox){
Line 139  void calcb(double **tab,struct canvas *can,int nox){
         Obj fr,gm,tm,sm;          Obj fr,gm,tm,sm;
         Real r,rx,ry;          Real r,rx,ry;
   
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         MKReal(1.0,rx); MKReal(1.0,ry); // dummy real          MKReal(1.0,rx); MKReal(1.0,ry); // dummy real
         BDY(rx)=can->xmin;          BDY(rx)=can->xmin;
         substr(CO,0,fr,can->vx,can->xmin?(Obj)rx:0,&tm); devalr(CO,tm,&gm);          substr(CO,0,fr,can->vx,can->xmin?(Obj)rx:0,&tm); devalr(CO,tm,&gm);
Line 373  void usubstqp(P p,Q r,Q *v){
Line 373  void usubstqp(P p,Q r,Q *v){
         }          }
 }  }
   
   Num tobf(Num,int);
   
   void plotcalcbf(struct canvas *can){
     Obj fr,s,t;
     Num xmin,xmax,ymin,ymax,xstep;
     Num u,v,ha,dx,dy,x;
     Num *tab;
     Real r;
     Q w,h1;
     int ix;
     POINT *pa;
     double rr;
     Q prec;
     NODE arg;
   
     STOQ(can->prec,prec); arg = mknode(1,prec); Psetprec(arg,&t);
     evalr(CO,(Obj)can->formula,can->prec,&fr);
     MKReal(can->xmin,r); xmin = tobf((Num)r,can->prec);
     MKReal(can->xmax,r); xmax = tobf((Num)r,can->prec);
     MKReal(can->ymin,r); ymin = tobf((Num)r,can->prec);
     MKReal(can->ymax,r); ymax = tobf((Num)r,can->prec);
     STOQ(can->width,w);
     subbf(xmax,xmin,&dx); divbf(dx,(Num)w,&xstep);
           tab=(Num *)MALLOC(can->width*sizeof(Num));
           for(ix=0,x=xmin;ix<can->width;ix++){
                   substr(CO,0,fr,can->vx,(Obj)x,(Obj *)&s);
                   evalr(CO,(Obj)s,can->prec,&t);
                   if(t&&(OID(t)!=O_N))
                           error("plotcalcbf : invalid evaluation");
                   tab[ix]=(Num)t;
       addbf(x,xstep,&u); x = u;
           }
           if(!cmpbf(ymax,ymin)){
                   for(ymax=ymin=tab[0],ix=1;ix<can->width;ix++){
                           if(cmpbf(tab[ix],ymax)>0)ymax=tab[ix];
                           if(cmpbf(tab[ix],ymin)<0)ymin=tab[ix];
                   }
                   can->ymax=ToReal(ymax);can->ymin=ToReal(ymin);
           }
     subbf(ymax,ymin,&dy);
           can->pa=(struct pa *)MALLOC(sizeof(struct pa));
           can->pa[0].length=can->width;
           can->pa[0].pos=pa=(POINT *)MALLOC(can->width*sizeof(POINT));
     STOQ(can->height-1,h1);
           for(ix=0;ix<can->width;ix++){
                   XC(pa[ix])=ix;
       subbf(ymax,tab[ix],&u); divbf(u,dy,&v); mulbf(v,(Num)h1,&u);
       rr = ToReal(u);
                   if(rr>MAXSHORT)YC(pa[ix])=MAXSHORT;
                   else if(rr<-MAXSHORT)YC(pa[ix])=-MAXSHORT;
                   else YC(pa[ix])=(long)rr;
           }
   }
   
 void plotcalc(struct canvas *can){  void plotcalc(struct canvas *can){
         //plot,memory_plot,plotover,plot_resize          //plot,memory_plot,plotover,plot_resize
         double x,xmin,xstep,ymax,ymin,dy,*tab,usubstrp();          double x,xmin,xstep,ymax,ymin,dy,*tab,usubstrp();
Line 381  void plotcalc(struct canvas *can){
Line 435  void plotcalc(struct canvas *can){
         Obj fr,t,s;          Obj fr,t,s;
         POINT *pa;          POINT *pa;
   
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    if ( can->prec ) {
       plotcalcbf(can);
       return;
     }
     todouble((Obj)can->formula,&fr);
         w=can->width;h=can->height;          w=can->width;h=can->height;
         xmin=can->xmin;xstep=(can->xmax-can->xmin)/w;          xmin=can->xmin;xstep=(can->xmax-can->xmin)/w;
         tab=(double *)ALLOCA(w*sizeof(double));          tab=(double *)ALLOCA(w*sizeof(double));
Line 426  void polarcalc(struct canvas *can){
Line 484  void polarcalc(struct canvas *can){
         Real r;          Real r;
         Obj fr,t,s;          Obj fr,t,s;
   
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         w=can->width; h=can->height; nstep=can->nzstep;          w=can->width; h=can->height; nstep=can->nzstep;
         pmin=can->zmin; pstep=(can->zmax-can->zmin)/nstep;          pmin=can->zmin; pstep=(can->zmax-can->zmin)/nstep;
         tabx=(double *)ALLOCA(nstep*sizeof(double));          tabx=(double *)ALLOCA(nstep*sizeof(double));
Line 474  void polarcalcNG(struct canvas *can){
Line 532  void polarcalcNG(struct canvas *can){
         Real r;          Real r;
         Obj fr,t,s;          Obj fr,t,s;
   
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         w=can->width; h=can->height; nstep=can->nzstep;          w=can->width; h=can->height; nstep=can->nzstep;
         pmin=can->zmin; pstep=(can->zmax-can->zmin)/nstep;          pmin=can->zmin; pstep=(can->zmax-can->zmin)/nstep;
         tabx=(double *)ALLOCA(nstep*sizeof(double));          tabx=(double *)ALLOCA(nstep*sizeof(double));
Line 523  void ineqncalc(double **tab,struct canvas *can,int nox
Line 581  void ineqncalc(double **tab,struct canvas *can,int nox
         V vx,vy;          V vx,vy;
   
         if(!nox) initmarker(can,"Evaluating...");          if(!nox) initmarker(can,"Evaluating...");
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         vx=can->vx;vy=can->vy;          vx=can->vx;vy=can->vy;
         w=can->width;h=can->height;          w=can->width;h=can->height;
         xmin=can->xmin;xstep=(can->xmax-can->xmin)/w;          xmin=can->xmin;xstep=(can->xmax-can->xmin)/w;
Line 555  void itvcalc(double **mask, struct canvas *can, int no
Line 613  void itvcalc(double **mask, struct canvas *can, int no
         Obj fr,g,t,s;          Obj fr,g,t,s;
   
         idv=can->division;          idv=can->division;
         MKReal(1.0,r); mulr(CO,(Obj)can->formula,(Obj)r,&fr);    todouble((Obj)can->formula,&fr);
         vx=can->vx; vy=can->vy;          vx=can->vx; vy=can->vy;
         xstep=(can->xmax-can->xmin)/can->width;          xstep=(can->xmax-can->xmin)/can->width;
         ystep=(can->ymax-can->ymin)/can->height;          ystep=(can->ymax-can->ymin)/can->height;

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.13

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>