Я не думаю, что это разрешимо без итеративного алгоритма.
Вот решение с псевдокодом, аналогичное версии с набором высоты, за исключением того, что оно работает с произвольной точностью и в более высоких измерениях.
CurrentPoint = Mean(Points)
While (CurrentPoint - PreviousPoint) Length > 0.01 Do
For Each Point in Points Do
Vector = CurrentPoint - Point
Vector Length = Vector Length - 1.0
Point2 = Point + Vector
Add Point2 To Points2
Loop
PreviousPoint = CurrentPoint
CurrentPoint = Mean(Points2)
Loop
Примечания:
Константа 0,01 не гарантирует, что результат будет в пределах 0,01 от истинного значения.Используйте меньшие значения для лучшей точности.
Константа 1.0 должна быть скорректирована до (я предполагаю) примерно 1/5 расстояния между самыми дальними точками.Слишком малые значения будут замедлять алгоритм, но слишком большие значения приведут к неточностям, которые могут привести к бесконечному циклу.