#include #include #include using namespace std; #define MAXN 25*25 double X[MAXN]; double Y[MAXN]; double Z[MAXN]; int FSZ[25]; int F[25][25]; /* Compute the hypervolume of the 3D simplex. This is just the determinant of * the edge vectors divided by 3!. */ double simplex3(int a, int b, int c, int d) { double A[3][3]; A[0][0] = X[b] - X[a]; A[0][1] = Y[b] - Y[a]; A[0][2] = Z[b] - Z[a]; A[1][0] = X[c] - X[a]; A[1][1] = Y[c] - Y[a]; A[1][2] = Z[c] - Z[a]; A[2][0] = X[d] - X[a]; A[2][1] = Y[d] - Y[a]; A[2][2] = Z[d] - Z[a]; return fabs(A[0][0] * A[1][1] * A[2][2] + A[0][1] * A[1][2] * A[2][0] + A[0][2] * A[1][0] * A[2][1] - A[0][0] * A[1][2] * A[2][1] - A[0][1] * A[1][0] * A[2][2] - A[0][2] * A[1][1] * A[2][0]); } int main() { for(int t = 1; ; t++) { int N; cin >> N; if(!N) break; double area = 0; for(int k = 0; k < N; k++) { int p = 0; int M; cin >> M; for(int i = 0; i < M; i++) { cin >> FSZ[i]; for(int j = 0; j < FSZ[i]; j++) { cin >> X[p] >> Y[p] >> Z[p]; F[i][j] = p++; } } for(int i = 1; i < M; i++) { for(int j = 1; j + 1 < FSZ[i]; j++) { area += simplex3(F[0][0], F[i][0], F[i][j], F[i][j + 1]); } } } printf("%.2f\n", area / 6); } }