Как я могу получить вектор тангенциального направления в Python?

Я могу получить некоторую информацию от Арки.

  • Первая точка   [x, y, z]
  • Последняя точка   [x, y, z]
  • Центр    [x, y, z]
  • Axis      [x, y, z] # Перпендикулярно плоскости

Как я могу получить вектор тангенциального направления FirstPoint и LastPoint?

Я хочу получить точку пересечения из двух векторов направления.

Я работаю в FreeCAD.


person eason    schedule 09.09.2016    source источник


Ответы (3)


Дуга окружности от A до B с центром M и вектором нормали N.

Направления касательной можно получить с помощью перекрестного произведения.

  • Тангенс в A: N x (A-M)
  • Тангенс в B: (B-M) x N

Оба соответствуют повороту на 90 градусов или -90 градусов радиус-векторов вокруг оси N.

person Lutz Lehmann    schedule 09.09.2016

Нам понадобится гораздо больше информации, чтобы дать хороший ответ, но вот первая попытка, а потом вопросы.

Один из способов аппроксимации касательного вектора — вектор секущей: если ваша кривая задана параметрически как функция от t, и вы хотите получить касательную в точке t_0, выберите небольшое число e; оценить функцию при t_0 + e и при t_0 - e; затем вычтите два результата, чтобы получить секущий вектор. Это будет хорошее приближение к касательному вектору, если ваша кривая не слишком кривая в этом интервале вокруг t.

Теперь о вопросах. Как ваш вопрос связан с Python и при чем здесь FreeCAD? Вы построили кривую в FreeCAD и хотите вычислить касательные в Python? Можете ли вы сказать что-нибудь о кривой, например, является ли она кубической сплайновой кривой, изгибается ли она только в одном направлении, что вы подразумеваете под «центром» и «осью»? (Произвольная кривая с касательными векторами не обязательно является кубическим сплайном, может изгибаться очень сложным образом и не имеет понятия центра или оси.)

person D-Von    schedule 09.09.2016

с.Кривая

Circle (Radius : 1, Position : (0.335157, 11.988, 5.55452), Direction : (-0.914329, -0.257151, 0.312851))

s.Vertex1.Point #FirstPoint

Vector (0.7393506936636021, 11.360676836326173, 6.220155663200929)

s.Vertex2.Point #LastPoint

Vector (0.3602513339713556, 12.723079925995924, 6.232050903393676)

s.Curve.FirstParameter

0.0

s.Curve.LastParameter

6.283185307179586

Это простая дуга.

person eason    schedule 09.09.2016