Я думаю, что с двумя ближайшими точками вы все еще можете получить странное скручивание ... Крайний пример: предположим, что оба круга имеют R = 1. Если центр первого круга - O, и он сидит на плоскости XY, а центр второго круга - в X = 1, Y = 0, Z = 0,01, и он просто слегка наклонен в направлении роста X, ближайший точки на двух кругах наверняка получат «странный поворот», которого вы пытаетесь избежать. Поскольку самые близкие точки не дают вам странного поворота в случае, если второй круг находится в точке X = 0, Y = 0, Z = 0,01 и одинаково наклонен, то в какой-то момент утверждения «выровнены по двум ближайшим точкам на двух кругах» и «странного скручивания не видно» больше не соответствуют друг другу.
Предполагая, что это может происходить в рамках ограничения NURBS, вот еще одна идея. В начале возьмем три точки на кривой NURBS - две, которые принадлежат центрам ваших кругов, а третья точно между ними. Нарисуйте плоскость между тремя. Эта плоскость пересечет два круга в 4 точках. Две из этих точек будут находиться на одной и той же «стороне» линии, которая соединяет центры окружностей - они являются вашими точками выравнивания.
Для следующих точек выравнивания вы должны взять точку выравнивания «предыдущего круга» и нарисовать плоскость между центром «предыдущего круга», этой точкой выравнивания и центром «нового круга». Отсюда вы получите «следующую точку выравнивания», основанную на пересечении с другим кругом.
Следующий шаг - «предыдущий круг» = «новый круг», а «новый круг» - ваш следующий по кривой NURBS.
Если радиусы от центров окружностей к выбранным точкам выравнивания пересекаются, вы знаете, что картинка будет выглядеть немного некрасиво - это сценарий, в котором с алгоритмом «ближайшей точки» вы все равно получите странное скручивание.
Я думаю, что координаты точки на окружности, которая является пересечением с плоскостью, проходящей через ее центр, должно быть легко вычислено (это точка на линии, образованная пересечением двух плоскостей, одной из окружности и цели плоскость; на расстоянии R от центра).
У меня нет строгих доказательств, чтобы полностью утверждать или опровергать вышесказанное - но, надеюсь, это поможет вообще, и я думаю, что это должно быть достаточно быстрым для проверки, по сравнению с подсчетом точек шкафа на двух кругах ... (Если в моей логике есть какие-либо недостатки, исправления в комментариях очень приветствуются).