7 occult(Obj2 *p1, Obj2 *p2, double)
10 double d1, d2, d3, d4;
20 for(i=0; i<=NPTS+1; i++) {
23 d3 = dist(&p1->point[i], &p2->point[i]);
24 if(i >= 2 && d2 <= d1 && d2 <= d3)
30 N = 2880*PER/NPTS; /* 1 min steps */
43 d3 = dist(&o1.act, &o2.act);
44 if(i >= 2 && d2 <= d1 && d2 <= d3)
48 fprint(2, "bad 1 \n");
52 if(d2 > o1.act.semi2+o2.act.semi2+50)
57 setime(day + deld*(di + x));
59 setobj(&xo1.point[i]);
61 setobj(&xo2.point[i]);
68 for(i=0; i<=240; i++) {
73 d3 = dist(&o1.act, &o2.act);
74 if(i >= 2 && d2 <= d1 && d2 <= d3)
78 fprint(2, "bad 2 \n");
82 if(d2 > o1.act.semi2 + o2.act.semi2)
86 occ.t3 = di + i1 * dx;
88 d3 = o1.act.semi2 - o2.act.semi2;
91 d4 = o1.act.semi2 + o2.act.semi2;
92 for(i=i1,x=x1;; i++) {
96 d2 = dist(&o1.act, &o2.act);
98 if(d1 <= d3 && d2 > d3) {
99 occ.t4 = di + (i-.5) * dx;
104 occ.t5 = di + (i-.5) * dx;
112 for(i=i1,x=x1;; i--) {
116 d2 = dist(&o1.act, &o2.act);
118 if(d1 <= d3 && d2 > d3) {
119 occ.t2 = di + (i+.5) * dx;
124 occ.t1 = di + (i+.5) * dx;
135 setpt(Occ *o, double x)
140 o->act.ra = o->del0.ra +
141 x*o->del1.ra + y*o->del2.ra;
142 o->act.decl2 = o->del0.decl2 +
143 x*o->del1.decl2 + y*o->del2.decl2;
144 o->act.semi2 = o->del0.semi2 +
145 x*o->del1.semi2 + y*o->del2.semi2;
146 o->act.el = o->del0.el +
147 x*o->del1.el + y*o->del2.el;
163 set3pt(Obj2 *p, int i, Occ *o)
173 o->del0.decl2 = p1->decl2;
174 o->del0.semi2 = p1->semi2;
178 o->del1.ra = pinorm(a);
179 a = p2->decl2 - p1->decl2;
180 o->del1.decl2 = pinorm(a);
181 o->del1.semi2 = p2->semi2 - p1->semi2;
182 o->del1.el = p2->el - p1->el;
184 a = p1->ra + p3->ra - 2*p2->ra;
185 o->del2.ra = pinorm(a)/2;
186 a = p1->decl2 + p3->decl2 - 2*p2->decl2;
187 o->del2.decl2 = pinorm(a)/2;
188 o->del2.semi2 = (p1->semi2 + p3->semi2 - 2*p2->semi2) / 2;
189 o->del2.el = (p1->el + p3->el - 2*p2->el) / 2;