// Smooth Flow Camera based on Pascals Triangle. // Author - James Scandrett // 22nd July 2005 #declare camloc = <-30,4,-30>; #declare order = 14; #declare camwid = 2; // {Power, P1, P2, P3, P4, P5, P6, P7, P8}, #declare pascals = array[14][15] { {1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {2, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {3, 1, 2, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {4, 1, 3, 3, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {5, 1, 4, 6, 4, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0}, {6, 1, 5, 10, 10, 5, 1, 0, 0, 0, 0, 0, 0, 0, 0}, {7, 1, 6, 15, 20, 15, 6, 1, 0, 0, 0, 0, 0, 0, 0}, {8, 1, 7, 21, 35, 35, 21, 7, 1, 0, 0, 0, 0, 0, 0}, {9, 1, 8, 28, 56, 70, 56, 28, 8, 1, 0, 0, 0, 0, 0}, {10, 1, 9, 36, 84, 126, 126, 84, 36, 9, 1, 0, 0, 0, 0}, {11, 1, 10, 45, 120, 210, 252, 210, 120, 45, 10, 1, 0, 0, 0}, {12, 1, 11, 55, 165, 330, 462, 462, 330, 165, 55, 11, 1, 0, 0}, {13, 1, 12, 66, 220, 495, 792, 924, 792, 495, 220, 66, 12, 1, 0}, {14, 1, 13, 78, 286, 715, 1287, 1716, 1716, 1287, 715, 286, 78, 13, 1}, } #declare cpoint = 19; #declare camlocs = array[14][4] { {carpos[cpoint * 0][1], carpos[cpoint * 0][2], carpos[cpoint * 0][3], 5}, {carpos[cpoint * 1][1], carpos[cpoint * 1][2], carpos[cpoint * 1][3], 5}, {carpos[cpoint * 2][1], carpos[cpoint * 2][2], carpos[cpoint * 2][3], 5}, {carpos[cpoint * 3][1], carpos[cpoint * 3][2], carpos[cpoint * 3][3], 5}, {carpos[cpoint * 4][1], carpos[cpoint * 4][2], carpos[cpoint * 4][3], 15}, {carpos[cpoint * 5][1], carpos[cpoint * 5][2], carpos[cpoint * 5][3], 15}, {carpos[cpoint * 6][1], carpos[cpoint * 6][2], carpos[cpoint * 6][3], 15}, {carpos[cpoint * 7][1], carpos[cpoint * 7][2], carpos[cpoint * 7][3], 15}, {carpos[cpoint * 8][1], carpos[cpoint * 8][2], carpos[cpoint * 8][3], 15}, {carpos[cpoint * 9][1], carpos[cpoint * 9][2], carpos[cpoint * 9][3], 15}, {carpos[cpoint * 10][1], carpos[cpoint * 10][2], carpos[cpoint * 10][3], 5}, {carpos[cpoint * 11][1], carpos[cpoint * 11][2], carpos[cpoint * 11][3], 5}, {carpos[cpoint * 12][1], carpos[cpoint * 12][2], carpos[cpoint * 12][3], 5}, {carpos[cpoint * 13][1], carpos[cpoint * 13][2], carpos[cpoint * 13][3], 5}, } #declare transit = clock / finaltime; // Assume pow(0,0) = 1 #declare point = 0; #declare sumxpoint = 0; #declare sumypoint = 0; #declare sumzpoint = 0; #declare sumcangle = 0; #while (point < order) #if (clock = 0) #declare xpoint = pascals[order - 1][point + 1] * camlocs[point][0] * pow(1 - transit,order - (point + 1)); #declare ypoint = pascals[order - 1][point + 1] * camlocs[point][1] * pow(1 - transit,order - (point + 1)); #declare zpoint = pascals[order - 1][point + 1] * camlocs[point][2] * pow(1 - transit,order - (point + 1)); #declare cangle = pascals[order - 1][point + 1] * camlocs[point][3] * pow(1 - transit,order - (point + 1)); #else #declare xpoint = pascals[order - 1][point + 1] * camlocs[point][0] * pow(transit,point) * pow(1 - transit,order - (point + 1)); #declare ypoint = pascals[order - 1][point + 1] * camlocs[point][1] * pow(transit,point) * pow(1 - transit,order - (point + 1)); #declare zpoint = pascals[order - 1][point + 1] * camlocs[point][2] * pow(transit,point) * pow(1 - transit,order - (point + 1)); #declare cangle = pascals[order - 1][point + 1] * camlocs[point][3] * pow(transit,point) * pow(1 - transit,order - (point + 1)); #end #declare sumxpoint = sumxpoint + xpoint; #declare sumypoint = sumypoint + ypoint; #declare sumzpoint = sumzpoint + zpoint; #declare sumcangle = sumcangle + cangle; #declare point = point + 1; #end #declare camlook = ; #declare camseparation = VDist (camloc, camlook); #declare camangle = degrees(atan(sumcangle/camseparation)); camera { location camloc look_at camlook angle abs(camangle) }