4 int compare_cell_size(EPP *f1,EPP *f2)
5 { double xsize1=fabs(f1->XRight-f1->XLeft)/(f1->lc-f1->fc);
6 double xsize2=fabs(f2->XRight-f2->XLeft)/(f2->lc-f2->fc);
7 double ysize1=fabs(f1->YTop-f1->YBottom)/(f1->lr-f1->fr);
8 double ysize2=fabs(f2->YTop-f2->YBottom)/(f2->lr-f2->fr);
9 /* fprintf(stderr,"Xsize ratio %g X tolerance %g\nYsize ratio %g Y tolerance %g\n",
10 xsize1/xsize2,1.0/(f1->lc-f1->fc),ysize1/ysize2,1.0/(f1->lr-f1->fr));
11 */ return (fabs(xsize1/xsize2-1.0)<1.0/(f1->lc-f1->fc)&&
12 fabs(ysize1/ysize2-1.0)<1.0/(f1->lr-f1->fr));
14 int is_aligned(EPP *f1,EPP *f2)
15 { if (!compare_cell_size(f1,f2)) return 0;
16 return (epp_row(f1,alt_yc(f2,f2->fr))==f2->fr&&
17 epp_col(f1,alt_xc(f2,f2->fc))==f2->fc);
19 EPP_LINK link_epp(EPP *base,EPP *overlay)
21 EPP_LINK tmp=malloc(sizeof(LINK_BUFFER));
22 if (base->XLeft<base->XRight)
23 {x1=base->XLeft<overlay->XLeft?base->XLeft:overlay->XLeft;
24 x2=base->XRight>overlay->XRight?base->XRight:overlay->XRight;
27 {x1=base->XLeft>overlay->XLeft?base->XLeft:overlay->XLeft;
28 x2=base->XRight<overlay->XRight?base->XRight:overlay->XRight;
30 if (base->YBottom<base->YTop)
31 {y1=base->YBottom<overlay->YBottom?base->YBottom:overlay->YBottom;
32 y2=base->YTop>overlay->YTop?base->YTop:overlay->YTop;
35 {y1=base->YBottom>overlay->YBottom?base->YBottom:overlay->YBottom;
36 y2=base->YTop<overlay->YTop?base->YTop:overlay->YTop;
38 tmp->ax=epp_col(overlay,x2)-epp_col(overlay,x1);
39 tmp->cx=epp_col(base,x2)-epp_col(base,x1);
40 tmp->bx=epp_col(overlay,x1)*tmp->cx-epp_col(base,x1)*tmp->ax;
41 tmp->ay=epp_row(overlay,y2)-epp_row(overlay,y1);
42 tmp->cy=epp_row(base,y2)-epp_row(base,y1);
43 tmp->by=epp_row(overlay,y1)*tmp->cy-epp_row(base,y1)*tmp->ay;
46 int linked_row(EPP_LINK link,int row)
47 { return (link->ay*row+link->by)/link->cy;
49 int linked_col(EPP_LINK link,int col)
50 { return (link->ax*col+link->bx)/link->cx;