Справочная информация:
Я пишу программу, которая обрабатывает большие количества данных, связанных с сетями вершин различных регулярных фигур. У меня есть рабочий генератор, который создает список декартовых координат, соответствующих вершинам указанных фигур, на основе диапазона входных параметров пользователя. Затем данные передаются фильтрам, которые очищают повторяющиеся записи, сортируют данные и различные другие функции, откуда очищенные данные подаются в модуль холста, который проходит и рисует вершины.
Вопрос:
Мне нужно реализовать новый фильтр, который эффективно проходит через координаты, сравнивая каждую пару с каждой другой парой, т.е. (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]
заключается в том, чтобы позволить интерфейсу группировать координаты для последующего использования в объектах холста. Метод должен иметь возможность обрабатывать потенциально тысячи координат.
Заранее благодарю за любую помощь, я, конечно же, желаю улучшить формулировку/информацию, которую я предоставил, и/или добавить примерный код, если неясно, что я прошу в любом случае - я все еще совершенно новый к этому!:)