Итак, ваша проблема в том, что человек уже нарисовал набор узлов и ребер, и вы хотите сделать тест, чтобы выяснить, по какому ребру щелкнули намного быстрее.
Ну ребро это отрезок. С целью фильтрации до небольшого числа возможных подходящих ребер нет вреда в расширении ребер в линии. Даже если у вас большое количество ребер, только небольшое число будет проходить близко к заданной точке, поэтому итерация по ним не будет плохой.
Теперь разделите ребра на две группы. Вертикальный, а не вертикальный. Вы можете сохранить вертикальные края в отсортированной структуре данных и легко проверить, какие вертикальные линии находятся близко к любой заданной точке.
Не вертикальные более хитры. Для них вы можете нарисовать вертикальные границы слева и справа от области, где могут быть размещены ваши узлы, а затем сохранить каждую линию как пару высот, на которой линия пересекает эти линии. И вы можете хранить эти пары в QuadTree. Вы можете добавить к этой логике QuadTree, чтобы иметь возможность взять точку и искать в QuadTree все линии, проходящие на определенном расстоянии от этой точки. (Идея состоит в том, что в любой точке QuadTree вы можете построить пару ограничительных линий для всех линий ниже этой точки. Если ваша точка не находится между этими линиями или рядом с ними, вы можете пропустить этот участок дерева .)