Проблема в том, что после выполнения:
var points = [[[Double]]]()
points
полностью пусто. Поэтому любая попытка доступа к любому из индексов приводит к ошибке «Индекс вне диапазона».
Поскольку вы собираетесь заполнить все это, инициализируйте три измерения, используя Array(repeating:count:)
.
var points = Array(repeating: Array(repeating: Array(repeating: 0.0, count: bMax + 1), count: nMax + 1), count: aMax + 1)
Теперь остальная часть вашего кода будет работать.