Как вычислить касательные окружности в 3D?

#java #trigonometry #geometry #processing

#java #тригонометрия #геометрия #обработка

Вопрос:

Мне нужна помощь для вычисления касательных окружности в 3D пространстве, это то, что у меня есть на данный момент введите описание изображения здесь

введите описание изображения здесь

Касательные представлены синими линиями, и это метод, который я получил от друга для их вычисления

 Vec3D getTangentBetweenTwoPoint( Vec3D p1, Vec3D p2 ) {
Vec3D r = new Vec3D( p1.x - p2.x,
                     p1.y - p2.y,
                     p1.z - p2.z );
  r.normalize();
  return r;
}

void getTangents() {
  Vec3D p0, p1;
  for ( int i = 1; i < curve_length   1; i   ) {
    p0 = points[i % curve_length];
    p1 = points[(i 1) % curve_length];
    tangents[i % curve_length] = getTangentBetweenTwoPoint( p0, p1 );
  }
}
  

Любая помощь будет высоко оценена

Комментарии:

1. В качестве дополнительного примечания: i < curve_length 1 было бы лучше i <= curve_length для наглядности.

Ответ №1:

В принципе, вы должны найти вектор от точки, для которой вам нужна касательная, до центра окружности и взять перекрестное произведение этого вектора на нормаль окружности (которую вы получаете, беря 2 точки окружности плюс центр, что приводит к уравнению плоскости).

Если вы нормализуете это перекрестное произведение, вы получаете вектор нормали / касательной для этой точки.

Ответ №2:

Замените i на i-1 в вашем коде здесь:

 p0 = points[(i-1) % curve_length];
  

Я предполагаю, что ваши точки расположены на равном расстоянии друг от друга на окружности, поэтому линия между предыдущей точкой и следующей точкой будет параллельна касательной в текущей точке.