/* hypo.c */ double b,bc,c2,d,st,t; short int aa,bb,nr,fnx(),fny(),c1,n1,s,red[16],green[16],blue[16]; extern int SPAdd(),SPDiv(),SPMul(),SPSub(),SPTieee(),SPFieee(); extern int SPSin(),SPCos(); void doepic(),epic(); extern double bf,cf,dd,bl,l,z; extern short int an,bd,cc,rr,ex; union kludge5 { FLOAT num5; int i5; } k5; union kludge6 { FLOAT num6; int i6; } k6; void epic() { short int h,v; h=fnx(0)+65; v=185-fny(0); SetAPen(rp,s); Move(rp,h,v); st=b/nr; ex=0; t=st; while (t<=b+st){ h=fnx(t)+65; v=185-fny(t); Draw(rp,h,v); t+=st; ex=stopcheck(); if (ex==1) break; } } fillscreen() { register short int i; for (i=4;i<=15;i++){ red[i]=RangeRand(16); green[i]=RangeRand(16); blue[i]=RangeRand(16); SetRGB4(vp,i,red[i],green[i],blue[i]); } SetAPen(rp,4); SetDrMd(w->RPort,JAM1); RectFill(w->RPort,0,0,320,200); } precalculate() { short int n2; s=5; c1=aa-bb; c2=(double)c1/bb; b=2.0*PI*bb; n1=-aa; n2=aa; d=(n2-n1)/180.0; nr=25*(aa+bb); if (nr>400) nr=401; z=1.0; if (an!=0) dd=360.0/an; else dd=360.0; z=z-(cc/dd); bd=bb; bl=bb-bf*bb; rr=1; z=z+(cc/dd); bc=bl-(cf*bd*(rr/dd)); l=(2*PI*an*rr)/360.0; } void doepic() { if (ex==1) return; while ((rr*an)<360){ ++rr; ++s; if (s>15) s=5; z=z+(cc/dd); bc=bl-(cf*bd*(rr/dd)); l=(2*PI*an*rr)/360.0; epic(); if (ex==1) break; } } short int fnx(t) double t; { k1.num1=t; k2.num2=c2; k5.num5=l; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k5.i5=SPFieee(k5.i5); k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */ k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */ k4.i4=SPCos(k2.i2); /* cos(t*c2+l) */ k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */ k3.i3=SPCos(k2.i2); /* cos(t+l) */ k1.num1=c1; k2.num2=bc; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k5.i5=SPMul(k1.i1,k3.i3); /* c1*cos(t+l) */ k6.i6=SPMul(k2.i2,k4.i4); /* bc*cos(t*c2+l) */ k3.i3=SPAdd(k6.i6,k5.i5); k1.num1=n1; k2.num2=d; k6.num6=z; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k6.i6=SPFieee(k6.i6); k4.i4=SPDiv(k6.i6,k3.i3); k3.i3=k4.i4; k4.i4=SPSub(k1.i1,k3.i3); k5.i5=SPDiv(k2.i2,k4.i4); k5.i5=SPTieee(k5.i5); return (short int)k5.num5; } short int fny(t) double t; { k1.num1=t; k2.num2=c2; k5.num5=l; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k5.i5=SPFieee(k5.i5); k3.i3=SPMul(k1.i1,k2.i2); /* t*c2 */ k2.i2=SPAdd(k3.i3,k5.i5); /* t*c2+l */ k4.i4=SPSin(k2.i2); /* sin(t*c2+l) */ k2.i2=SPAdd(k1.i1,k5.i5); /* t+l */ k3.i3=SPSin(k2.i2); /* sin(t+l) */ k1.num1=c1; k2.num2=bc; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k5.i5=SPMul(k1.i1,k3.i3); /* c1*sin(t+l) */ k6.i6=SPMul(k2.i2,k4.i4); /* bc*sin(t*c2+l) */ k3.i3=SPSub(k6.i6,k5.i5); k1.num1=n1; k2.num2=d; k6.num6=z; k1.i1=SPFieee(k1.i1); k2.i2=SPFieee(k2.i2); k6.i6=SPFieee(k6.i6); k4.i4=SPDiv(k6.i6,k3.i3); k3.i3=k4.i4; k4.i4=SPSub(k1.i1,k3.i3); k5.i5=SPDiv(k2.i2,k4.i4); k1.num1=.5; k1.i1=SPFieee(k1.i1); k3.i3=SPAdd(k1.i1,k5.i5); k3.i3=SPTieee(k3.i3); return (short int)k3.num3; }