Как решить символическое нелинейное векторное уравнение? (Matlab или другое) - PullRequest
0 голосов
/ 13 июля 2011

Я пытаюсь найти решение этого символического нелинейного векторного уравнения:

P = a*(V0*t+P0) + b*(V1*t+P1) + (1-a-b)*(V2*t+P2) for a, b and t

, где P, V0, V1, V2, P0, P1, P2 - известные 3d-векторы.

Я пытался сделать это в Matlab следующим образом:

P = sym('P', [3,1])
P0 = sym('P0', [3,1])
P1 = sym('P1', [3,1])
P2 = sym('P2', [3,1])
V0 = sym('V0', [3,1])
V1 = sym('V1', [3,1])
V2 = sym('V2', [3,1])
syms a b t
F = a*(V0*t+P0) + b*(V1*t+P1) + (1-a-b)*(V2*t+P2) - P
solve(F,a,b,t)

Я получаю

Warning: Explicit solution could not be found.

У меня заканчиваются идеи, как решить эту проблему, это не такЭто не первый математический пакет, который я попробовал.

Интересным моментом является то, что это уравнение имеет простую геометрическую интерпретацию.Если вы представите, что точки P0-P2 являются вершинами треугольника, V0-V2 - это примерно нормали вершин, а точка P лежит над треугольником, то уравнение выполняется для треугольника, содержащего точку P с тремя вершинами на трех лучах (V* t + P), разделяя одно и то же значение параметра t.a, b и (1-ab) становятся барицентрическими координатами точки P.

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

1 Ответ

1 голос
/ 13 июля 2011

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

Представьте, что вы выбираете любые значения, скажем, b и t. Тогда почти во всех случаях вы можете решить за, так что вы получите много разных решений.

Если вы хотите мыслить геометрически, представьте, что V0 и V1 указывают в верхнем полупространстве относительно треугольника (P0, P1, P2), а V2 - в нижнем. Также V0, V1 перпендикулярны плоскости треугольника, а V0 и V1 - единичные векторы. Теперь, если у вас есть плоскость, закрепленная в точке P, которая пересекает лучи P0 + t * V0 и P1 + t * V1 на одинаковом расстоянии над треугольником, вы можете переместить плоскость таким образом, чтобы она оставалась закрепленной в точке P и пересекая два луча на одном расстоянии. Вопрос только в том, чтобы выбрать V2 таким образом, чтобы точка пересечения с этой плоскостью двигалась с одинаковой скоростью, поэтому она будет соответствовать одному и тому же t, что даст вам бесконечно много решений.

Другой пример был бы, если бы все V0-V2 были коллинеарными с треугольником P0, P1, P2. Тогда вы тривиально получаете решение для любого т.

Так что вам нужно больше уравнений, чтобы решить это символически.

...