Я сомневаюсь, что есть лучшее решение, чем вычисление расстояния между красным и каждым синим и сортировка их по длине.
Что касается сортировки, обычно QuickSort трудно превзойти по производительности (оптимизированная, которая обрезает рекурсию, если размер становится меньше 7 элементов и переключается на что-то вроде InsertionSort, возможно ShellSort).
Таким образом, я предполагаю, что вопрос заключается в том, как быстро рассчитать расстояние между двумя полигонами, ведь вам нужно сделать это вычисление 50 раз.
Следующий подход будет работать и для 3D, но, вероятно, не самый быстрый:
Минимальное расстояние многоугольника в 2D-пространстве
Вопрос в том, готовы ли вы обменять точность на скорость? Например. Вы можете упаковать все многоугольники в ограничивающие прямоугольники, где стороны прямоугольников параллельны осям системы координат. 3D-игры используют этот подход довольно часто. Для этого вам нужно найти максимальное и минимальное значения для каждой координаты (x, y, z), чтобы построить виртуальную ограничивающую рамку. Расчет расстояний между этими ограничивающими прямоугольниками является довольно тривиальной задачей.
Вот пример изображения более продвинутых ограничивающих рамок, которые не параллельны осям системы координат:
Ориентированные ограничивающие рамки - OBB
Однако это делает вычисление расстояния менее тривиальным. Он используется для обнаружения столкновений, так как вам не нужно знать расстояние для этого, вам нужно знать только, находится ли один край одного ограничивающего прямоугольника внутри другого ограничивающего прямоугольника.
На следующем изображении показана ограничивающая рамка для выравнивания по осям:
Ограничивающая коробка с выровненными осями - AABB
OOB более точны, AABB быстрее. Может быть, вы хотите прочитать эту статью:
Продвинутые методы обнаружения столкновений
Это всегда предполагает, что вы готовы обменять точность на скорость. Если точность важнее скорости, вам может понадобиться более продвинутая техника.