diff --git a/solvers/UNeverTellMeTheOdds.pas b/solvers/UNeverTellMeTheOdds.pas index 793a7aa..af87de3 100644 --- a/solvers/UNeverTellMeTheOdds.pas +++ b/solvers/UNeverTellMeTheOdds.pas @@ -46,8 +46,6 @@ type private FMin, FMax: Int64; FHailstones: THailstones; - FA: array[0..10] of TBigInt; - FH: array[0..6] of TBigInt; function AreIntersecting(constref AHailstone1, AHailstone2: THailstone): Boolean; function FindRockThrow(const AIndex0, AIndex1, AIndex2: Integer): Int64; procedure CalcCollisionPolynomials(constref AHailstone0, AHailstone1, AHailstone2: THailstone; out OPolynomial0, @@ -137,7 +135,7 @@ end; procedure TNeverTellMeTheOdds.CalcCollisionPolynomials(constref AHailstone0, AHailstone1, AHailstone2: THailstone; out OPolynomial0, OPolynomial1: TBigIntPolynomial); var - k: array[0..139] of TBigInt; + k: array[0..74] of TBigInt; begin // Solving this non-linear equation system, with velocities V_i and start positions P_i: // V_0 * t_0 + P_0 = V_x * t_0 + P_x @@ -207,13 +205,13 @@ begin // e_0 = k_13 * t_0 + k_7 // f_2 = (k_11 * t_0 + k_4) * k_9 + k_8 * (k_12 * t_0 + k_6) // = (k_11 * k_9 + k_8 * k_12) * t_0 + k_4 * k_9 + k_8 * k_6 - // = FH_0 * t_0 + FH_1 + // = k_14 * t_0 + k_15 // f_1 = (k_11 * t_0 + k_4) * (k_13 * t_0 + k_7) + k_8 * k_5 * t_0 - k_2 * t_0 * k_9 - (k_10 * t_0 + k_3) * (k_12 * t_0 + k_6) // = (k_11 * k_13 - k_10 * k_12) * t_0^2 + (k_11 * k_7 + k_4 * k_12 + k_8 * k_5 - k_2 * k_9 - k_10 * k_6 - k_3 * k_12) * t_0 + k_4 * k_7 - k_3 * k_6 - // = FH_2 * t_0^2 + FH_3 * t_0 + FH_4 + // = k_16 * t_0^2 + k_17 * t_0 + k_18 // f_0 = (k_10 * t_0 + k_3) * k_5 * t_0 + k_2 * t_0 * (k_13 * t_0 + k_7) // = (k_10 * k_5 + k_2 * k_13) * t_0^2 + (k_3 * k_5 + k_2 * k_7) * t_0 - // = FH_5 * t_0^2 + FH_6 * t_0 + // = k_19 * t_0^2 + k_20 * t_0 k[0] := AHailstone0.P0 - AHailstone2.P0; k[1] := AHailstone0.P0 - AHailstone1.P0; @@ -230,207 +228,207 @@ begin k[12] := AHailstone0.V2 - AHailstone1.V2; k[13] := AHailstone0.V2 - AHailstone2.V2; - FH[0] := k[11] * k[9] + k[8] * k[12]; - FH[1] := k[4] * k[9] + k[8] * k[6]; - FH[2] := k[11] * k[13] - k[10] * k[12]; - FH[3] := k[11] * k[7] + k[4] * k[13] + k[8] * k[5] - k[2] * k[9] - k[10] * k[6] - k[3] * k[12]; - FH[4] := k[4] * k[7] - k[3] * k[6]; - FH[5] := k[10] * k[5] + k[2] * k[13]; - FH[6] := k[3] * k[5] + k[2] * k[7]; + k[14] := k[11] * k[9] + k[8] * k[12]; + k[15] := k[4] * k[9] + k[8] * k[6]; + k[16] := k[11] * k[13] - k[10] * k[12]; + k[17] := k[11] * k[7] + k[4] * k[13] + k[8] * k[5] - k[2] * k[9] - k[10] * k[6] - k[3] * k[12]; + k[18] := k[4] * k[7] - k[3] * k[6]; + k[19] := k[10] * k[5] + k[2] * k[13]; + k[20] := k[3] * k[5] + k[2] * k[7]; // Additional substitutions. // a_1 * k_9 - V_20 * d_1 // = (V_00 * t_0 + k_0) * k_9 - V_20 * (k_12 * t_0 + k_6) // = (V_00 * k_9 - V_20 * k_12) * t_0 + k_0 * k_9 - V_20 * k_6 - // = k_14 * t_0 + k_15 + // = k_21 * t_0 + k_22 // d_1 - k_9 * t_0 // = k_12 * t_0 + k_6 - k_9 * t_0 // = (k_12 - k_9) * t_0 + k_6 // a_1 * e_0 - V_20 * d_0 // = (V_00 * t_0 + k_0) * (k_13 * t_0 + k_7) - V_20 * k_5 * t_0 // = V_00 * k_13 * t_0^2 + (V_00 * k_7 + k_0 * k_13 - V_20 * k_5) * t_0 + k_0 * k_7 - // = k_16 * t_0^2 + k_17 * t_0 + k_18 + // = k_23 * t_0^2 + k_24 * t_0 + k_25 // d_0 - e_0 * t_0 // = k_5 * t_0 - k_13 * t_0^2 - k_7 * t_0 - // = - k_13 * t_0^2 + k_19 * t_0 + // = - k_13 * t_0^2 + k_26 * t_0 // f_1^2 - // = (FH_2 * t_0^2 + FH_3 * t_0 + FH_4)^2 - // = FH_2^2 * t_0^4 + FH_3^2 * t_0^2 + FH_4^2 + 2 * FH_2 * t_0^2 * FH_3 * t_0 + 2 * FH_2 * t_0^2 * FH_4 + 2 * FH_3 * t_0 * FH_4 - // = FH_2^2 * t_0^4 + 2 * FH_2 * FH_3 * t_0^3 + (FH_3^2 + 2 * FH_2 * FH_4) * t_0^2 + 2 * FH_3 * FH_4 * t_0 + FH_4^2 - // = FH_2^2 * t_0^4 + k_20 * t_0^3 + k_22 * t_0^2 + k_23 * t_0 + FH_4^2 + // = (k_16 * t_0^2 + k_17 * t_0 + k_18)^2 + // = k_16^2 * t_0^4 + k_17^2 * t_0^2 + k_18^2 + 2 * k_16 * t_0^2 * k_17 * t_0 + 2 * k_16 * t_0^2 * k_18 + 2 * k_17 * t_0 * k_18 + // = k_16^2 * t_0^4 + 2 * k_16 * k_17 * t_0^3 + (k_17^2 + 2 * k_16 * k_18) * t_0^2 + 2 * k_17 * k_18 * t_0 + k_18^2 + // = k_16^2 * t_0^4 + k_27 * t_0^3 + k_29 * t_0^2 + k_30 * t_0 + k_18^2 // f_2^2 - // = (FH_0 * t_0 + FH_1)^2 - // = FH_0^2 * t_0^2 + 2 * FH_0 * FH_1 * t_0 + FH_1^2 - // = FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2 + // = (k_14 * t_0 + k_15)^2 + // = k_14^2 * t_0^2 + 2 * k_14 * k_15 * t_0 + k_15^2 + // = k_14^2 * t_0^2 + k_31 * t_0 + k_15^2 // f_0 * f_2 - // = (FH_5 * t_0^2 + FH_6 * t_0) * (FH_0 * t_0 + FH_1) - // = FH_5 * FH_0 * t_0^3 + (FH_5 * FH_1 + FH_6 * FH_0) * t_0^2 + FH_6 * FH_1 * t_0 - // = k_126 * t_0^3 + k_127 * t_0^2 + k_128 * t_0 + // = (k_19 * t_0^2 + k_20 * t_0) * (k_14 * t_0 + k_15) + // = k_19 * k_14 * t_0^3 + (k_19 * k_15 + k_20 * k_14) * t_0^2 + k_20 * k_15 * t_0 + // = k_33 * t_0^3 + k_34 * t_0^2 + k_35 * t_0 // f_1^2 + 4 * f_0 * f_2 - // = FH_2^2 * t_0^4 + k_20 * t_0^3 + k_22 * t_0^2 + k_23 * t_0 + FH_4^2 + 4 * (k_126 * t_0^3 + k_127 * t_0^2 + k_128 * t_0) - // = k_31 * t_0^4 + k_132 * t_0^3 + k_133 * t_0^2 + k_134 * t_0 + k_58 + // = k_16^2 * t_0^4 + k_27 * t_0^3 + k_29 * t_0^2 + k_30 * t_0 + k_18^2 + 4 * (k_33 * t_0^3 + k_34 * t_0^2 + k_35 * t_0) + // = k_37 * t_0^4 + k_75 * t_0^3 + k_76 * t_0^2 + k_77 * t_0 + k_59 // f_1^2 + 2 * f_0 * f_2 - // = FH_2^2 * t_0^4 + k_20 * t_0^3 + k_22 * t_0^2 + k_23 * t_0 + FH_4^2 + 2 * (k_126 * t_0^3 + k_127 * t_0^2 + k_128 * t_0) - // = k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58 + // = k_16^2 * t_0^4 + k_27 * t_0^3 + k_29 * t_0^2 + k_30 * t_0 + k_18^2 + 2 * (k_33 * t_0^3 + k_34 * t_0^2 + k_35 * t_0) + // = k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59 - k[14] := AHailstone0.V0 * k[9] - AHailstone2.V0 * k[12]; - k[15] := k[0] * k[9] - AHailstone2.V0 * k[6]; - k[16] := AHailstone0.V0 * k[13]; - k[17] := AHailstone0.V0 * k[7] + k[0] * k[13] - AHailstone2.V0 * k[5]; - k[18] := k[0] * k[7]; - k[19] := k[5] - k[7]; - k[20] := 2 * FH[2] * FH[3]; - k[21] := FH[3] * FH[3]; - k[22] := k[21] + 2 * FH[2] * FH[4]; - k[23] := 2 * FH[3] * FH[4]; - k[24] := 2 * FH[0] * FH[1]; - k[25] := FH[0] * FH[0]; - k[126] := FH[5] * FH[0]; - k[127] := FH[5] * FH[1] + FH[6] * FH[0]; - k[128] := FH[6] * FH[1]; - k[28] := FH[1] * FH[1]; - k[31] := FH[2] * FH[2]; - k[137] := k[20] + 2 * k[126]; - k[138] := k[22] + 2 * k[127]; - k[139] := k[23] + 2 * k[128]; - k[40] := k[14] + AHailstone1.V0 * (k[12] - k[9]); - k[41] := k[15] + AHailstone1.V0 * k[6]; - k[42] := k[16] - k[14] - AHailstone1.V0 * k[13] - (k[12] - k[9]) * AHailstone0.V0; - k[43] := k[17] - k[15] + AHailstone1.V0 * k[19] - (k[12] - k[9]) * k[1] - k[6] * AHailstone0.V0; - k[44] := k[18] - k[6] * k[1]; - k[45] := k[42] * FH[0] - k[40] * FH[2]; - k[46] := k[42] * FH[1] + k[43] * FH[0] - k[41] * FH[2] - k[40] * FH[3]; - k[47] := k[43] * FH[1] + k[44] * FH[0] - k[41] * FH[3] - k[40] * FH[4]; - k[48] := k[44] * FH[1] - k[41] * FH[4]; - k[49] := k[42] * FH[2]; - k[50] := k[40] * k[31] - k[49] * FH[0]; - k[51] := k[42] * FH[3] + k[43] * FH[2]; - k[52] := k[40] * k[137] + k[41] * k[31] - k[51] * FH[0] - k[49] * FH[1]; - k[53] := k[42] * FH[4] + k[43] * FH[3] + k[44] * FH[2]; - k[54] := k[40] * k[138] + k[41] * k[137] - k[53] * FH[0] - k[51] * FH[1]; - k[55] := k[43] * FH[4] + k[44] * FH[3]; - k[56] := k[40] * k[139] + k[41] * k[138] - k[55] * FH[0] - k[53] * FH[1]; - k[57] := k[44] * FH[4]; - k[58] := FH[4] * FH[4]; - k[59] := k[40] * k[58] + k[41] * k[139] - k[57] * FH[0] - k[55] * FH[1]; - k[60] := k[41] * k[58] - k[57] * FH[1]; - k[61] := k[13] * AHailstone0.V0 - k[16]; - k[62] := 2 * k[25] * k[61]; - k[63] := k[13] * k[1] - k[19] * AHailstone0.V0 - k[17]; - k[64] := 2 * (k[24] * k[61] + k[25] * k[63]); - k[65] := - k[19] * k[1] - k[18]; - k[66] := 2 * (k[28] * k[61] + k[24] * k[63] + k[25] * k[65]); - k[67] := 2 * (k[28] * k[63] + k[24] * k[65]); - k[68] := 2 * k[28] * k[65]; - k[69] := k[50] + k[62]; - k[70] := k[52] + k[64]; - k[71] := k[54] + k[66]; - k[72] := k[56] + k[67]; - k[73] := k[59] + k[68]; + k[21] := AHailstone0.V0 * k[9] - AHailstone2.V0 * k[12]; + k[22] := k[0] * k[9] - AHailstone2.V0 * k[6]; + k[23] := AHailstone0.V0 * k[13]; + k[24] := AHailstone0.V0 * k[7] + k[0] * k[13] - AHailstone2.V0 * k[5]; + k[25] := k[0] * k[7]; + k[26] := k[5] - k[7]; + k[27] := 2 * k[16] * k[17]; + k[28] := k[17] * k[17]; + k[29] := k[28] + 2 * k[16] * k[18]; + k[30] := 2 * k[17] * k[18]; + k[31] := 2 * k[14] * k[15]; + k[32] := k[14] * k[14]; + k[33] := k[19] * k[14]; + k[34] := k[19] * k[15] + k[20] * k[14]; + k[35] := k[20] * k[15]; + k[36] := k[15] * k[15]; + k[37] := k[16] * k[16]; + k[38] := k[27] + 2 * k[33]; + k[39] := k[29] + 2 * k[34]; + k[40] := k[30] + 2 * k[35]; + k[41] := k[21] + AHailstone1.V0 * (k[12] - k[9]); + k[42] := k[22] + AHailstone1.V0 * k[6]; + k[43] := k[23] - k[21] - AHailstone1.V0 * k[13] - (k[12] - k[9]) * AHailstone0.V0; + k[44] := k[24] - k[22] + AHailstone1.V0 * k[26] - (k[12] - k[9]) * k[1] - k[6] * AHailstone0.V0; + k[45] := k[25] - k[6] * k[1]; + k[46] := k[43] * k[14] - k[41] * k[16]; + k[47] := k[43] * k[15] + k[44] * k[14] - k[42] * k[16] - k[41] * k[17]; + k[48] := k[44] * k[15] + k[45] * k[14] - k[42] * k[17] - k[41] * k[18]; + k[49] := k[45] * k[15] - k[42] * k[18]; + k[50] := k[43] * k[16]; + k[51] := k[41] * k[37] - k[50] * k[14]; + k[52] := k[43] * k[17] + k[44] * k[16]; + k[53] := k[41] * k[38] + k[42] * k[37] - k[52] * k[14] - k[50] * k[15]; + k[54] := k[43] * k[18] + k[44] * k[17] + k[45] * k[16]; + k[55] := k[41] * k[39] + k[42] * k[38] - k[54] * k[14] - k[52] * k[15]; + k[56] := k[44] * k[18] + k[45] * k[17]; + k[57] := k[41] * k[40] + k[42] * k[39] - k[56] * k[14] - k[54] * k[15]; + k[58] := k[45] * k[18]; + k[59] := k[18] * k[18]; + k[60] := k[41] * k[59] + k[42] * k[40] - k[58] * k[14] - k[56] * k[15]; + k[61] := k[42] * k[59] - k[58] * k[15]; + k[62] := k[13] * AHailstone0.V0 - k[23]; + k[63] := 2 * k[32] * k[62]; + k[64] := k[13] * k[1] - k[26] * AHailstone0.V0 - k[24]; + k[65] := 2 * (k[31] * k[62] + k[32] * k[64]); + k[66] := - k[26] * k[1] - k[25]; + k[67] := 2 * (k[36] * k[62] + k[31] * k[64] + k[32] * k[66]); + k[68] := 2 * (k[36] * k[64] + k[31] * k[66]); + k[69] := 2 * k[36] * k[66]; + k[70] := k[51] + k[63]; + k[71] := k[53] + k[65]; + k[72] := k[55] + k[67]; + k[73] := k[57] + k[68]; + k[74] := k[60] + k[69]; // Unused, they are part of the polynomial inside the square root. - //k[132] := k[20] + 4 * k[126]; - //k[133] := k[22] + 4 * k[127]; - //k[134] := k[23] + 4 * k[128]; + //k[75] := k[27] + 4 * k[33]; + //k[76] := k[29] + 4 * k[34]; + //k[77] := k[30] + 4 * k[35]; // Continuing calculations for equation 5. - // 0 = (k_14 * t_0 + k_15 + V_10 * ((k_12 - k_9) * t_0 + k_6)) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58 -+ f_1 * sqrt(f_1^2 + 4 * f_0 * f_2)) - // + (k_16 * t_0^2 + k_17 * t_0 + k_18 - t_0 * (k_14 * t_0 + k_15) - ((k_12 - k_9) * t_0 + k_6) * a_2 - V_10 * (k_13 * t_0^2 - k_19 * t_0)) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * a_2 * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) - // 0 = (k_40 * t_0 + k_41) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58 -+ f_1 * sqrt(f_1^2 + 4 * f_0 * f_2)) - // + ((k_16 - k_14 - V_10 * k_13 - (k_12 - k_9) * V_00) * t_0^2 + (k_17 - k_15 + V_10 * k_19 - (k_12 - k_9) * k_1 - k_6 * V_00) * t_0 + k_18 - k_6 * k_1) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * a_2 * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) - // 0 = (k_40 * t_0 + k_41) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58) - // -+ (k_40 * t_0 + k_41) * f_1 * sqrt(f_1^2 + 4 * f_0 * f_2) - // + (k_42 * t_0^2 + k_43 * t_0 + k_44) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * a_2 * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) - // 0 = (k_40 * t_0 + k_41) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58) - // -+ (k_40 * t_0 + k_41) * f_1 * sqrt(f_1^2 + 4 * f_0 * f_2) - // - (k_42 * t_0^2 + k_43 * t_0 + k_44) * f_1 * f_2 - // +- (k_42 * t_0^2 + k_43 * t_0 + k_44) * f_2 * sqrt(f_1^2 + 4 * f_0 * f_2) - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * a_2 * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) - // 0 = +- ((k_42 * t_0^2 + k_43 * t_0 + k_44) * f_2 - (k_40 * t_0 + k_41) * f_1) * sqrt(f_1^2 + 4 * f_0 * f_2) - // + (k_40 * t_0 + k_41) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58) - // - (k_42 * t_0^2 + k_43 * t_0 + k_44) * f_1 * f_2 - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * a_2 * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) - // 0 = +- ((k_42 * t_0^2 + k_43 * t_0 + k_44) * (FH_0 * t_0 + FH_1) - (k_40 * t_0 + k_41) * (FH_2 * t_0^2 + FH_3 * t_0 + FH_4)) * sqrt(f_1^2 + 4 * f_0 * f_2) - // + (k_40 * t_0 + k_41) * (k_31 * t_0^4 + k_137 * t_0^3 + k_138 * t_0^2 + k_139 * t_0 + k_58) - // - (k_42 * t_0^2 + k_43 * t_0 + k_44) * (FH_2 * t_0^2 + FH_3 * t_0 + FH_4) * (FH_0 * t_0 + FH_1) - // - 2 * t_0 * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + 2 * (k_13 * t_0^2 - k_19 * t_0) * (V_00 * t_0 + k_1) * (FH_0^2 * t_0^2 + k_24 * t_0 + FH_1^2) + // 0 = (k_21 * t_0 + k_22 + V_10 * ((k_12 - k_9) * t_0 + k_6)) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59 -+ f_1 * sqrt(f_1^2 + 4 * f_0 * f_2)) + // + (k_23 * t_0^2 + k_24 * t_0 + k_25 - t_0 * (k_21 * t_0 + k_22) - ((k_12 - k_9) * t_0 + k_6) * a_2 - V_10 * (k_13 * t_0^2 - k_26 * t_0)) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * a_2 * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + // 0 = (k_41 * t_0 + k_42) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59 -+ f_1 * sqrt(f_1^2 + 4 * f_0 * f_2)) + // + ((k_23 - k_21 - V_10 * k_13 - (k_12 - k_9) * V_00) * t_0^2 + (k_24 - k_22 + V_10 * k_26 - (k_12 - k_9) * k_1 - k_6 * V_00) * t_0 + k_25 - k_6 * k_1) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * a_2 * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + // 0 = (k_41 * t_0 + k_42) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59) + // -+ (k_41 * t_0 + k_42) * f_1 * sqrt(f_1^2 + 4 * f_0 * f_2) + // + (k_43 * t_0^2 + k_44 * t_0 + k_45) * (- f_1 * f_2 +- f_2 * sqrt(f_1^2 + 4 * f_0 * f_2)) + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * a_2 * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + // 0 = (k_41 * t_0 + k_42) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59) + // -+ (k_41 * t_0 + k_42) * f_1 * sqrt(f_1^2 + 4 * f_0 * f_2) + // - (k_43 * t_0^2 + k_44 * t_0 + k_45) * f_1 * f_2 + // +- (k_43 * t_0^2 + k_44 * t_0 + k_45) * f_2 * sqrt(f_1^2 + 4 * f_0 * f_2) + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * a_2 * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + // 0 = +- ((k_43 * t_0^2 + k_44 * t_0 + k_45) * f_2 - (k_41 * t_0 + k_42) * f_1) * sqrt(f_1^2 + 4 * f_0 * f_2) + // + (k_41 * t_0 + k_42) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59) + // - (k_43 * t_0^2 + k_44 * t_0 + k_45) * f_1 * f_2 + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * a_2 * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + // 0 = +- ((k_43 * t_0^2 + k_44 * t_0 + k_45) * (k_14 * t_0 + k_15) - (k_41 * t_0 + k_42) * (k_16 * t_0^2 + k_17 * t_0 + k_18)) * sqrt(f_1^2 + 4 * f_0 * f_2) + // + (k_41 * t_0 + k_42) * (k_37 * t_0^4 + k_38 * t_0^3 + k_39 * t_0^2 + k_40 * t_0 + k_59) + // - (k_43 * t_0^2 + k_44 * t_0 + k_45) * (k_16 * t_0^2 + k_17 * t_0 + k_18) * (k_14 * t_0 + k_15) + // - 2 * t_0 * (k_23 * t_0^2 + k_24 * t_0 + k_25) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) + 2 * (k_13 * t_0^2 - k_26 * t_0) * (V_00 * t_0 + k_1) * (k_14^2 * t_0^2 + k_31 * t_0 + k_15^2) // 0 = +- ( - // (k_42 * FH_0 - k_40 * FH_2) * t_0^3 - // + (k_42 * FH_1 + k_43 * FH_0 - k_41 * FH_2 - k_40 * FH_3) * t_0^2 - // + (k_43 * FH_1 + k_44 * FH_0 - k_41 * FH_3 - k_40 * FH_4) * t_0 - // + k_44 * FH_1 - k_41 * FH_4 + // (k_43 * k_14 - k_41 * k_16) * t_0^3 + // + (k_43 * k_15 + k_44 * k_14 - k_42 * k_16 - k_41 * k_17) * t_0^2 + // + (k_44 * k_15 + k_45 * k_14 - k_42 * k_17 - k_41 * k_18) * t_0 + // + k_45 * k_15 - k_42 * k_18 // ) * sqrt(f_1^2 + 4 * f_0 * f_2) - // + (k_40 * k_31 - k_42 * FH_2 * FH_0) * t_0^5 - // + (k_40 * k_137 + k_41 * k_31 - k_42 * FH_3 * FH_0 - k_43 * FH_2 * FH_0 - k_42 * FH_2 * FH_1) * t_0^4 - // + (k_40 * k_138 + k_41 * k_137 - k_42 * FH_4 * FH_0 - k_43 * FH_3 * FH_0 - k_44 * FH_2 * FH_0 - k_42 * FH_3 * FH_1 - k_43 * FH_2 * FH_1) * t_0^3 - // + (k_40 * k_139 + k_41 * k_138 - k_43 * FH_4 * FH_0 - k_44 * FH_3 * FH_0 - k_42 * FH_4 * FH_1 - k_43 * FH_3 * FH_1 - k_44 * FH_2 * FH_1) * t_0^2 - // + (k_40 * k_58 + k_41 * k_139 - k_44 * FH_4 * FH_0 - k_43 * FH_4 * FH_1 - k_44 * FH_3 * FH_1) * t_0 - // + k_41 * k_58 - k_44 * FH_4 * FH_1 - // + 2 * (k_13 * V_00 * FH_0^2 - k_16 * FH_0^2) * t_0^5 - // + 2 * (k_13 * V_00 * k_24 + k_13 * k_1 * FH_0^2 - k_19 * V_00 * FH_0^2 - k_16 * k_24 - k_17 * FH_0^2) * t_0^4 - // + 2 * (k_13 * V_00 * FH_1^2 + k_13 * k_1 * k_24 - k_19 * V_00 * k_24 - k_19 * k_1 * FH_0^2 - k_16 * FH_1^2 - k_17 * k_24 - k_18 * FH_0^2) * t_0^3 - // + 2 * (k_13 * k_1 * FH_1^2 - k_19 * V_00 * FH_1^2 - k_19 * k_1 * k_24 - k_17 * FH_1^2 - k_18 * k_24) * t_0^2 - // + 2 * (- k_19 * k_1 * FH_1^2 - k_18 * FH_1^2) * t_0 - // 0 = +- (k_45 * t_0^3 + k_46 * t_0^2 + k_47 * t_0 + k_48) * sqrt(f_1^2 + 4 * f_0 * f_2) - // + (k_50 + k_62) * t_0^5 + (k_52 + k_64) * t_0^4 + (k_54 + k_66) * t_0^3 + (k_56 + k_67) * t_0^2 + (k_59 + k_68) * t_0 + k_60 - // 0 = +- (k_45 * t_0^3 + k_46 * t_0^2 + k_47 * t_0 + k_48) * sqrt(k_31 * t_0^4 + k_132 * t_0^3 + k_133 * t_0^2 + k_134 * t_0 + k_58) - // + k_69 * t_0^5 + k_70 * t_0^4 + k_71 * t_0^3 + k_72 * t_0^2 + k_73 * t_0 + k_60 + // + (k_41 * k_37 - k_43 * k_16 * k_14) * t_0^5 + // + (k_41 * k_38 + k_42 * k_37 - k_43 * k_17 * k_14 - k_44 * k_16 * k_14 - k_43 * k_16 * k_15) * t_0^4 + // + (k_41 * k_39 + k_42 * k_38 - k_43 * k_18 * k_14 - k_44 * k_17 * k_14 - k_45 * k_16 * k_14 - k_43 * k_17 * k_15 - k_44 * k_16 * k_15) * t_0^3 + // + (k_41 * k_40 + k_42 * k_39 - k_44 * k_18 * k_14 - k_45 * k_17 * k_14 - k_43 * k_18 * k_15 - k_44 * k_17 * k_15 - k_45 * k_16 * k_15) * t_0^2 + // + (k_41 * k_59 + k_42 * k_40 - k_45 * k_18 * k_14 - k_44 * k_18 * k_15 - k_45 * k_17 * k_15) * t_0 + // + k_42 * k_59 - k_45 * k_18 * k_15 + // + 2 * (k_13 * V_00 * k_14^2 - k_23 * k_14^2) * t_0^5 + // + 2 * (k_13 * V_00 * k_31 + k_13 * k_1 * k_14^2 - k_26 * V_00 * k_14^2 - k_23 * k_31 - k_24 * k_14^2) * t_0^4 + // + 2 * (k_13 * V_00 * k_15^2 + k_13 * k_1 * k_31 - k_26 * V_00 * k_31 - k_26 * k_1 * k_14^2 - k_23 * k_15^2 - k_24 * k_31 - k_25 * k_14^2) * t_0^3 + // + 2 * (k_13 * k_1 * k_15^2 - k_26 * V_00 * k_15^2 - k_26 * k_1 * k_31 - k_24 * k_15^2 - k_25 * k_31) * t_0^2 + // + 2 * (- k_26 * k_1 * k_15^2 - k_25 * k_15^2) * t_0 + // 0 = +- (k_46 * t_0^3 + k_47 * t_0^2 + k_48 * t_0 + k_49) * sqrt(f_1^2 + 4 * f_0 * f_2) + // + (k_51 + k_63) * t_0^5 + (k_53 + k_65) * t_0^4 + (k_55 + k_67) * t_0^3 + (k_57 + k_68) * t_0^2 + (k_60 + k_69) * t_0 + k_61 + // 0 = +- (k_46 * t_0^3 + k_47 * t_0^2 + k_48 * t_0 + k_49) * sqrt(k_37 * t_0^4 + k_75 * t_0^3 + k_76 * t_0^2 + k_77 * t_0 + k_59) + // + k_70 * t_0^5 + k_71 * t_0^4 + k_72 * t_0^3 + k_73 * t_0^2 + k_74 * t_0 + k_61 - OPolynomial0 := TBigIntPolynomial.Create([k[60], k[73], k[72], k[71], k[70], k[69]]); - OPolynomial1 := TBigIntPolynomial.Create([k[48], k[47], k[46], k[45]]); + OPolynomial0 := TBigIntPolynomial.Create([k[61], k[74], k[73], k[72], k[71], k[70]]); + OPolynomial1 := TBigIntPolynomial.Create([k[49], k[48], k[47], k[46]]); // Squaring that formula eliminates the square root, but may lead to a polynomial with all coefficients zero in some // cases. Therefore this part is merely included for the interested reader. - // -+ (k_45 * t_0^3 + k_46 * t_0^2 + k_47 * t_0 + k_48) * sqrt(k_31 * t_0^4 + k_132 * t_0^3 + k_133 * t_0^2 + k_134 * t_0 + k_58) = - // k_69 * t_0^5 + k_70 * t_0^4 + k_71 * t_0^3 + k_72 * t_0^2 + k_73 * t_0 + k_60 - // (k_45 * t_0^3 + k_46 * t_0^2 + k_47 * t_0 + k_48)^2 * (k_31 * t_0^4 + k_132 * t_0^3 + k_133 * t_0^2 + k_134 * t_0 + k_58) = - // (k_69 * t_0^5 + k_70 * t_0^4 + k_71 * t_0^3 + k_72 * t_0^2 + k_73 * t_0 + k_60)^2 + // -+ (k_46 * t_0^3 + k_47 * t_0^2 + k_48 * t_0 + k_49) * sqrt(k_37 * t_0^4 + k_75 * t_0^3 + k_76 * t_0^2 + k_77 * t_0 + k_59) = + // k_70 * t_0^5 + k_71 * t_0^4 + k_72 * t_0^3 + k_73 * t_0^2 + k_74 * t_0 + k_61 + // (k_46 * t_0^3 + k_47 * t_0^2 + k_48 * t_0 + k_49)^2 * (k_37 * t_0^4 + k_75 * t_0^3 + k_76 * t_0^2 + k_77 * t_0 + k_59) = + // (k_70 * t_0^5 + k_71 * t_0^4 + k_72 * t_0^3 + k_73 * t_0^2 + k_74 * t_0 + k_61)^2 // 0 = - // (k_45^2 * t_0^6 - // + 2 * k_45 * k_46 * t_0^5 - // + k_46^2 * t_0^4 + 2 * k_45 * k_47 * t_0^4 - // + 2 * k_45 * k_48 * t_0^3 + 2 * k_46 * k_47 * t_0^3 - // + k_47^2 * t_0^2 + 2 * k_46 * k_48 * t_0^2 - // + 2 * k_47 * k_48 * t_0 - // + k_48^2 - // ) * (k_31 * t_0^4 + k_132 * t_0^3 + k_133 * t_0^2 + k_134 * t_0 + k_58) - // - k_69^2 * t_0^10 - // - 2 * k_69 * k_70 * t_0^9 - // - (k_70^2 + 2 * k_69 * k_71) * t_0^8 - // - 2 * (k_69 * k_72 + k_70 * k_71) * t_0^7 - // - (k_71^2 + 2 * k_69 * k_73 + 2 * k_70 * k_72) * t_0^6 - // - 2 * (k_69 * k_60 + k_70 * k_73 + k_71 * k_72) * t_0^5 - // - (k_72^2 + 2 * k_70 * k_60 + 2 * k_71 * k_73) * t_0^4 - // - 2 * (k_71 * k_60 + k_72 * k_73) * t_0^3 - // - (k_73^2 + 2 * k_72 * k_60) * t_0^2 - // - 2 * k_73 * k_60 * t_0 - // - k_60^2 + // (k_46^2 * t_0^6 + // + 2 * k_46 * k_47 * t_0^5 + // + k_47^2 * t_0^4 + 2 * k_46 * k_48 * t_0^4 + // + 2 * k_46 * k_49 * t_0^3 + 2 * k_47 * k_48 * t_0^3 + // + k_48^2 * t_0^2 + 2 * k_47 * k_49 * t_0^2 + // + 2 * k_48 * k_49 * t_0 + // + k_49^2 + // ) * (k_37 * t_0^4 + k_75 * t_0^3 + k_76 * t_0^2 + k_77 * t_0 + k_59) + // - k_70^2 * t_0^10 + // - 2 * k_70 * k_71 * t_0^9 + // - (k_71^2 + 2 * k_70 * k_72) * t_0^8 + // - 2 * (k_70 * k_73 + k_71 * k_72) * t_0^7 + // - (k_72^2 + 2 * k_70 * k_74 + 2 * k_71 * k_73) * t_0^6 + // - 2 * (k_70 * k_61 + k_71 * k_74 + k_72 * k_73) * t_0^5 + // - (k_73^2 + 2 * k_71 * k_61 + 2 * k_72 * k_74) * t_0^4 + // - 2 * (k_72 * k_61 + k_73 * k_74) * t_0^3 + // - (k_74^2 + 2 * k_73 * k_61) * t_0^2 + // - 2 * k_74 * k_61 * t_0 + // - k_61^2 // 0 = ak_10 * t_0^10 + ak_9 * t_0^9 + ak_8 * t_0^8 + ak_7 * t_0^7 + ak_6 * t_0^6 + ak_5 * t_0^5 + ak_4 * t_0^4 + ak_3 * t_0^3 + ak_2 * t_0^2 + ak_1 * t_0 + ak_0 - //k[74] := k[45] * k[45]; - //k[75] := 2 * k[45] * k[46]; - //k[76] := k[46] * k[46] + 2 * k[45] * k[47]; - //k[77] := 2 * (k[45] * k[48] + k[46] * k[47]); - //k[78] := k[47] * k[47] + 2 * k[46] * k[48]; - //k[79] := 2 * k[47] * k[48]; - //k[80] := k[48] * k[48]; - //ak[0] := k[58] * k[80] - k[60] * k[60]; - //ak[1] := k[134] * k[80] + k[58] * k[79] - 2 * k[73] * k[60]; - //ak[2] := k[133] * k[80] + k[134] * k[79] + k[58] * k[78] - k[73] * k[73] - 2 * k[72] * k[60]; - //ak[3] := k[133] * k[79] + k[134] * k[78] + k[58] * k[77] + k[132] * k[80] - // - 2 * (k[71] * k[60] + k[72] * k[73]); - //ak[4] := k[31] * k[80] + k[133] * k[78] + k[134] * k[77] + k[58] * k[76] + k[132] * k[79] - k[72] * k[72] - // - 2 * (k[70] * k[60] + k[71] * k[73]); - //ak[5] := k[31] * k[79] + k[133] * k[77] + k[134] * k[76] + k[58] * k[75] + k[132] * k[78] - // - 2 * (k[69] * k[60] + k[70] * k[73] + k[71] * k[72]); - //ak[6] := k[31] * k[78] + k[133] * k[76] + k[134] * k[75] + k[58] * k[74] + k[132] * k[77] - k[71] * k[71] - // - 2 * (k[69] * k[73] + k[70] * k[72]); - //ak[7] := k[31] * k[77] + k[133] * k[75] + k[134] * k[74] + k[132] * k[76] - 2 * (k[69] * k[72] + k[70] * k[71]); - //ak[8] := k[31] * k[76] + k[132] * k[75] + k[133] * k[74] - k[70] * k[70] - 2 * k[69] * k[71]; - //ak[9] := k[31] * k[75] + k[132] * k[74] - 2 * k[69] * k[70]; - //ak[10] := k[31] * k[74] - k[69] * k[69]; + //k[78] := k[46] * k[46]; + //k[79] := 2 * k[46] * k[47]; + //k[80] := k[47] * k[47] + 2 * k[46] * k[48]; + //k[81] := 2 * (k[46] * k[49] + k[47] * k[48]); + //k[82] := k[48] * k[48] + 2 * k[47] * k[49]; + //k[83] := 2 * k[48] * k[49]; + //k[84] := k[49] * k[49]; + //ak[0] := k[59] * k[84] - k[61] * k[61]; + //ak[1] := k[77] * k[84] + k[59] * k[83] - 2 * k[74] * k[61]; + //ak[2] := k[76] * k[84] + k[77] * k[83] + k[59] * k[82] - k[74] * k[74] - 2 * k[73] * k[61]; + //ak[3] := k[76] * k[83] + k[77] * k[82] + k[59] * k[81] + k[75] * k[84] + // - 2 * (k[72] * k[61] + k[73] * k[74]); + //ak[4] := k[37] * k[84] + k[76] * k[82] + k[77] * k[81] + k[59] * k[80] + k[75] * k[83] - k[73] * k[73] + // - 2 * (k[71] * k[61] + k[72] * k[74]); + //ak[5] := k[37] * k[83] + k[76] * k[81] + k[77] * k[80] + k[59] * k[79] + k[75] * k[82] + // - 2 * (k[70] * k[61] + k[71] * k[74] + k[72] * k[73]); + //ak[6] := k[37] * k[82] + k[76] * k[80] + k[77] * k[79] + k[59] * k[78] + k[75] * k[81] - k[72] * k[72] + // - 2 * (k[70] * k[74] + k[71] * k[73]); + //ak[7] := k[37] * k[81] + k[76] * k[79] + k[77] * k[78] + k[75] * k[80] - 2 * (k[70] * k[73] + k[71] * k[72]); + //ak[8] := k[37] * k[80] + k[75] * k[79] + k[76] * k[78] - k[71] * k[71] - 2 * k[70] * k[72]; + //ak[9] := k[37] * k[79] + k[75] * k[78] - 2 * k[70] * k[71]; + //ak[10] := k[37] * k[78] - k[70] * k[70]; end; function TNeverTellMeTheOdds.CalcRockThrowCollisionOptions(constref AHailstone0, AHailstone1, AHailstone2: THailstone):