#include #include #include #include #include #include struct {double x,y,r;} circle[30]; double calct(double x0, double y0, double dx, double dy, double xi, double yi, double ri) { double xc, yc, a, b, c, p, q, t; xc = (double)(x0 - xi); yc = (double)(y0 - yi); a = (double)(dx * dx) + (double)(dy * dy); b = 2 * (xc * (double)(dx) + yc * (double)(dy)); c = xc * xc + yc * yc - double(ri * ri); p = b / a; q = c / a; t = - p / 2 - sqrt(p * p / 4 - q); return t; } double x0, y0, dx, dy; int num; int curkreis = -1; int findhit() { double mint = 1e+250, t, sx, sy, hx, hy, ndx, ndy, x1, y1; int mini = -1; for(int i = 0; i < num; i++) { if(i != curkreis) { t = calct(x0, y0, dx, dy, circle[i].x, circle[i].y, circle[i].r); if(t < mint && t > 0) { mini = i; mint = t; } } } if(mini >= 0) { x1 = x0 + mint * dx; y1 = y0 + mint * dy; sx = circle[mini].x - x1; sy = circle[mini].y - y1; hx = sx * sx - sy * sy; hy = 2 * sx * sy; ndx = - hx * dx - hy * dy; ndy = - hy * dx + hx * dy; dx = ndx; dy = ndy; x0 = x1; y0 = y1; curkreis = mini; return mini; } return -1; } int prog=0; int main() { ifstream in("reflect.in"); while(1) { in >> num; if(num == 0) return 0; prog++; cout << "Scene " << prog << endl; for(int i = 0; i < num; i++) { in >> circle[i].x; in >> circle[i].y; in >> circle[i].r; } in >> x0; in >> y0; in >> dx; in >> dy; int n = 0; int i = 0; while(1) { i = findhit(); n++; if(n > 10) break; if( i >= 0) cout << (i+ 1) << " "; else break; } if( i>= 0) { cout << "...\n\n"; } else cout << "inf\n\n"; } }