IPB
ЛогинПароль:

> Дан вектор в R3. Найти 2 перпендикулярных ему, тоже длины.
TarasBer
сообщение 8.11.2009 15:43
Сообщение #1


Злостный любитель
*****

Группа: Пользователи
Сообщений: 1 755
Пол: Мужской

Репутация: -  62  +


Собсна задача такая. Есть трёхмерный вектор v. Найти векторы v1 и v2, которые перпендикулярны v и друг другу, и имеют ту же длину, что и v. На плоскости аналогичная задача элементарна - вектору (x, y) сопоставляется (-y, x), сопоставление корректно и для нулевой длины. В трёхмерном пространстве такой красивой формулы нету - в топологии есть известная "теорема о причёсывании ежа", говорящая о том, что на поверхности чётномерной сферы не существует ненулевого непрерывного векторного поля. По сути v/abs(v) - точка на двухмерной сфере, v1 и v2 - касательные векторы в точке v. Нам как раз нужно ненулевое векторное поле. Непрерывной зависимости тут не построить, ну и ладно. Вопрос в том, чтобы найти v1 и v2 наиболее оптимальным способом. Вот моё решение "в лоб", мне оно не нравится:

  l := sqrt(sqr(v[0]) + sqr(v[1]) + sqr(v[2]));
  if l < 1E-7 then begin
    v1[0] := 0;
    v1[1] := 0;
    v1[2] := 0;         
    v2[0] := 0;
    v2[1] := 0;
    v2[2] := 0;
  end else begin
    if (v[0] >= v[1]) and (v[0] >= v[2]) then begin  //ищем первый перпендикуляр
      v1[0] := -v[1];
      v1[1] := v[0];
      v1[2] := 0;
    end else begin
      v1[0] := 0;
      v1[1] := -v[2];
      v1[2] := v[1];
    end;
    v2[0] := v[1]*v1[2]-v[2]*v1[1];                   // векторный произведением ищем второй
    v2[1] := v[2]*v1[0]-v[0]*v1[2];
    v2[2] := v[0]*v1[1]-v[1]*v1[0];
    l1 := sqrt(sqr(v1[0]) + sqr(v1[1]) + sqr(v1[2])); // нормируем
    l2 := sqrt(sqr(v2[0]) + sqr(v2[1]) + sqr(v2[2]));
    v1[0] := v1[0]/l1*l;
    v1[1] := v1[1]/l1*l;
    v1[2] := v1[2]/l1*l;
    v2[0] := v2[0]/l2*l;
    v2[1] := v2[1]/l2*l;
    v2[2] := v2[2]/l2*l;
  end;



--------------------
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия 28.07.2025 5:55
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"