I had changed the bounds formula to be the cell size times the cell number for the number of cells plus one. Hardcoding the bounds to what they were before, I got the same result as before.
spread, arc, angle
5.0 20.0 -10.0
5.0 20.0 10.0
0.0 20.0 -160.0
0.0 20.0 180.0
0.0 20.0 160.0
5.0 90.0 120.0
minimum and maximum means
-17.5 -2.5
2.5 17.5
-170.0 -150.0
170.0 -170.0
150.0 170.0
77.5 162.5
Optimum Angle: 167
Bounds
(-110.0, -91.667, -73.333, -55.0, -36.667, -18.333, 0.0, 18.333, 36.667, 55.0, 73.333, 91.667, 110.0)
Distributions
(1.0, -0.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0)
(1.0, 0.0, -0.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0, -0.0, 0.0, 0.0, 0.0)
(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0)
(0.241, 0.045, 0.048, 0.05, 0.052, 0.052, 0.053, 0.052, 0.051, 0.049, 0.046, 0.043, 0.219)
(0.5, 0.053, 0.052, 0.05, 0.048, 0.046, 0.042, 0.038, 0.034, 0.03, 0.025, 0.021, 0.061)
(0.859, 0.03, 0.026, 0.021, 0.017, 0.013, 0.01, 0.007, 0.005, 0.004, 0.002, 0.002, 0.002)
What should the armor bounds formula be? The difference between armor cell bounds seems to be 18 1/3, and that difference times the number of cells, 12, equals twice the rightmost number. So, the position of each bound should be its index times the bound distance minus half the product of the bound distance and the number of cells.
number_of_cells = 12
cell_width = 18 + 1/3
right_bound = number_of_cells * cell_width / 2
tuple(i * cell_width - right_bound for i in range(number_of_cells + 1)
>>(-109.99980000000001, -91.66646666666668, -73.33313333333334, -54.99980000000001, -36.66646666666668, -18.33313333333335, 0.00019999999999242846, 18.333533333333307, 36.66686666666665, 55.00019999999999, 73.3335333333333, 91.66686666666665, 110.00019999999999)
which, rounded to three decimal places, are our previous bounds within rounding error.
(-110.0, -91.666, -73.333, -55.0, -36.666, -18.333, 0.0, 18.334, 36.667, 55.0, 73.334, 91.667, 110.0)
Adding this code to the test and changing the armor cell width to 18 + 1/3 yields this result, which I believe to be the same as it was before.
spread, arc, angle
5.0 20.0 -10.0
5.0 20.0 10.0
0.0 20.0 -160.0
0.0 20.0 180.0
0.0 20.0 160.0
5.0 90.0 120.0
minimum and maximum means
-17.5 -2.5
2.5 17.5
-170.0 -150.0
170.0 -170.0
150.0 170.0
77.5 162.5
Optimum Angle: 167
Bounds
(-110.0, -91.667, -73.333, -55.0, -36.667, -18.333, 0.0, 18.333, 36.667, 55.0, 73.333, 91.667, 110.0)
Distributions
(1.0, -0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0)
(1.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0, -0.0, 0.0, 0.0, -0.0, 0.0, 0.0, 0.0)
(1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.0, -0.0)
(0.008, 0.01, 0.018, 0.029, 0.043, 0.059, 0.073, 0.085, 0.092, 0.096, 0.095, 0.091, 0.082, 0.219)
(0.061, 0.041, 0.056, 0.071, 0.083, 0.092, 0.096, 0.096, 0.092, 0.083, 0.071, 0.056, 0.041, 0.061)
(0.338, 0.093, 0.096, 0.095, 0.09, 0.08, 0.067, 0.052, 0.037, 0.024, 0.014, 0.007, 0.004, 0.002)
If you agree that they are the same, then I will add a results-check to the test.