нахождение ортогональных векторов цилиндра - PullRequest
0 голосов
/ 10 февраля 2012

Даны r и h круглого цилиндра и две конечные точки h: A (x1, y1, z1) и B (x2, y2, z2).Итак, h будет одним из трех ортогональных векторов цилиндра, тогда как найти другие два ортогональных вектора?

1 Ответ

0 голосов
/ 10 февраля 2012

Хорошо, вектор оси цилиндра U = B - A = (x2-x1, y2-y1, z2-z1); разделите на его величину, и вы получите вектор u = U / | U | единичной длины. Это легкая часть.

Два других ортогональных вектора произвольны, и существует множество способов их определения. Вот простой:

  1. Выберите случайный вектор r1.
  2. Вычислить часть r1, которая является , а не в направлении u: r2 = r1 - (r1. U) u; этот вектор перпендикулярен u, потому что r2. и = г1. u - (r1. u) * (u.u) = 0
  3. Если величина r2 мала (скажем, меньше 0,1), вернитесь к шагу 1.
  4. Вычислить v = r2 / | r2 |. Он имеет единичную длину и перпендикулярен u.
  5. Вычислить w = u x v. Он имеет единичную длину и перпендикулярен u и v.

В общем, я не думаю, что есть какой-либо способ детерминистически избежать попытки использовать более одного вектора, перпендикулярного u. Если вы хотите использовать фиксированную матрицу преобразования координат M для генерации r1 = Mu, всегда есть вероятность, что r1 очень близко к u в направлении. (а линейные операции, такие как замена компонентов x и y вектора или вычисление x '= y, y' = -x, могут быть записаны как преобразования координат.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...