Тогда можно предположить, что каждый раз в качестве входных данных будет хорда или несколько хорд.
В таком случае я бы предложил такой алгоритм (навскидку). Берём произвольные 3 точки и описываем вокруг них окружность. И так делаем 10000 раз. Многие окружности должны примерно совпадать. Смотрим, какие из них близки друг к другу и учитываем только их. Выбросы игнорируем. Где провести границу между "хорошей" окружностью и выбросом - решаете вы. Все хорошие окружности усредняем (координаты центра и радиус), и получается максимально точный прогноз.
К тому же это Q&A, то есть вы задаёте вопрос и вам подсказывают решение, но не решают задачу вместо вас. Так-то задачи здесь вообще запрещены. В общем, направление я вам дал, дальше только ленивый не справится. :)
Burk7589, в этом случае нужно сказать, как именно они распределены. Решение в общем случае будет исходить из некоторых предположений, а они в свою очередь зависят от практической области, где будет применяться данное решение.
Для лучшего понимания, сформулирую ту же мысль другими словами. Каков бы ни был в итоге ваш алгоритм, найдётся способ его обмануть, скормив ему исходные данные, на которых он сильно ошибётся. И чем проще алгоритм, тем сильнее можно его подставить.
Johnny Lowhunter, Спасибо, интересные тесты. Из них главный вывод, что разницы почти нет, то есть отличие не в разы, а на примерно 10%, это ни о чём.
Но разница всё же есть. И она в пользу for. Просто автор теста почему-то наивно составил цикл. Ведь разумнее длину массива проверять лишь единожды, потому что она не меняется. Так что я форкнул и немного изменил код цикла:
Да-да, я уже поменял в ответе на точку с запятой. Просто если локаль таблицы выставлена как США (у меня), то можно использовать просто запятые, а для "русских таблиц" нужно использовать точку с запятой.