#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];
Я предполагаю, что ваши точки расположены на равном расстоянии друг от друга на окружности, поэтому линия между предыдущей точкой и следующей точкой будет параллельна касательной в текущей точке.