#include #include #include using namespace std; typedef complex complex_t; #define EPS (1e-12) #define MIN (-100.0) #define MAX (+100.0) double compare(double x, double y) { if(x - y > EPS) return +1; if(y - x > EPS) return -1; return 0; } int main(void) { int n; while(cin >> n) { if(n == 0) break; vector z1(n), z2(n); int m = 1; for(int i = 0; i < n; i++) { double x1, y1, x2, y2; cin >> x1 >> y1 >> x2 >> y2; z1[i] = complex_t(x1, y1); z2[i] = complex_t(x2, y2); vector v; for(int j = 0; j < i; j++) { complex_t ai = z2[i] - z1[i]; complex_t bi = z1[i] * conj(z2[i]) - z2[i] * conj(z1[i]); complex_t aj = z2[j] - z1[j]; complex_t bj = z1[j] * conj(z2[j]) - z2[j] * conj(z1[j]); complex_t za = ai * bj - aj * bi; complex_t zb = ai * conj(aj) - aj * conj(ai); if(compare(abs(zb), 0.0) == 0) continue; complex_t z = za / zb; if(compare(real(z), MIN) <= 0) continue; if(compare(real(z), MAX) >= 0) continue; if(compare(imag(z), MIN) <= 0) continue; if(compare(imag(z), MAX) >= 0) continue; bool flag = true; for(int k = 0; k < v.size(); k++) { if(abs(v[k] - z) < 1e-8) { flag = false; break; } } if(flag) { v.push_back(z); } } m += 1 + v.size(); } cout << m << endl; } return 0; }