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