Я бы хранил элементы с данными, необходимыми для получения информации для любой точки этого элемента. Например, дуга нуждается в x, y, начальном направлении, радиусе, длине (или конечной точке, или разности углов, или в том, что вы считаете наиболее простым).
Поскольку вам нужна непрерывность (тот же самый x, y, тот же самый подшипник, возможно, та же самая кривизна) между двумя конечными точками, тогда node
с этими свойствами необходим. Обратите внимание, что эти свойства являются общими для дуг и прямых (специальная дуга, обозначенная радиусом = 0). Таким образом, вы можете рассматривать node
так же, как item
.
Траектория должна быть рассчитана перед любым запросом. Таким образом, у вас есть все элементы данных заранее.
Контейнер зависит от того, как вы запрашиваете информацию.
Если траектория может быть каким-то образом представлена в сетке, то лучше использовать квад-дерево.
Полагаю, вы должны найти предмет из x,y
или accumulated length
ввода. Вам придется перебирать контейнер, чтобы найти элемент, ближайший к входным данным. Сортированные данные могут помочь.
Мой выбор - простой вектор с последовательными элементами, который сортируется по накопленной длине траектории.
Найти по x,y
в отсортированном по x контейнере (или дереве) не так просто, поскольку некоторые x,y
могут иметь перпендикуляры к нескольким элементам, последовательным или нет, рядом или нет, и вам нужно выбрать ближайший.