Справочная информация:
Я пишу программу, которая обрабатывает большие количества данных, связанных с сетями вершин различных регулярных фигур. У меня есть рабочий генератор, который создает список декартовых координат, соответствующих вершинам указанных фигур, на основе диапазона входных параметров пользователя. Затем данные передаются фильтрам, которые очищают повторяющиеся записи, сортируют данные и различные другие функции, откуда очищенные данные подаются в модуль холста, который проходит и рисует вершины.
Вопрос:
Мне нужно реализовать новый фильтр, который эффективно проходит через координаты, сравнивая каждую пару с каждой другой парой, т.е. (x1,y1) → (x2,y2) до (x1,y1) → (xn,yn), (x2,y2) → (x3,y3) до (x2,y2) → (xn,yn) и т.д. для всех записей и, например, если соотношение между (x1,y1) и (x5,y5) соответствует [(x5-x1)^2+(y5-y1)^2]=vertex_spacing^2, тогда два набора координат затем соединяются с их соответствующим списком и добавляется в новый список, где одна запись будет иметь вид: [(x1,y1), (x5,y5), 0, 4] например. Каков наиболее эффективный метод достижения этого?
Мои попытки:
Я рассмотрел несколько методов обработки списков здесь и в разных руководствах. Я попытался использовать вложенные петли "for" и "if", но найти, пока этот метод может работать, приводит к чрезмерно длительному времени работы, а также пытается разбить проблему на множество меньших для циклов.
Дополнительные примечания:
Конечной целью этого является использование результирующих координат для интерфейсных элементов интерфейса и их сохранение и импорт по мере необходимости. Функция позиций 0 и 4 списка в [(x1,y1), (x5,y5), 0, 4] заключается в том, чтобы позволить интерфейсу группировать координаты для последующего использования в объектах холста. Метод должен иметь возможность обрабатывать потенциально тысячи координат.
Заранее благодарю за любую помощь, я, конечно же, желаю улучшить формулировку/информацию, которую я предоставил, и/или добавить примерный код, если неясно, что я прошу в любом случае - я все еще совершенно новый к этому!:)