Найти перпендикулярные координаты в трехмерном пространстве, используя две трехмерные точки
Предположим, у меня есть куб шесть на шесть, каждый с координатами xyz.
Переходя от среднего куба (0,0,0) к другим сторонам (скажем, (0,1,0), я хотел бы найти другие 4 компонента, которые расположены в среднем кубе, следуя направлению (0, 1,0).
Если мы переместим одно измерение, это легко (и мой мозг может это понять)... компоненты будут (-1,0,0),(+1,0,0), (0,0,+1), (0,0,-1).
Теперь, может кто-нибудь помочь мне с переходом к размеру, где меняются две (на (1,1,0) или три координаты (1,1, -1)?
Спасибо, Родриго
2 ответа
Спасибо, это именно то, что я сделал.
Вот мое решение:
(в Matlab) я создал ряд значений всех возможных единиц:
pos_vals=[ 0 0 0 ; -1 0 0 ; 1 0 0 ; 0 1 0 ; 0 -1 0 ; -1 -1 0 ; 1 1 0 ; -1 1 0 ; 1 -1 0; 0 0 1 ; -1 0 1 ; 1 0 1 ; 0 1 1 ; 0 -1 1 ; -1 -1 1 ; 1 1 1 ; -1 1 1 ; 1 -1 1 ; 0 0 -1 ; -1 0 -1 ; 1 0 -1 ; 0 1 -1 ; 0 -1 -1 ; -1 -1 -1 ; 1 1 -1 ; -1 1 -1 ; 1 -1 -1];
А затем на основе моей ссылки координат [например vec_ofinterest=(1,1,0) ], я делаю следующее:
for idx_posvals=1:size(pos_vals,1)
gg(idx_posvals)=dot(vec_ofinterest,pos_vals(idx_posvals,:));
if gg(idx_posvals) == 0
pos_vals(idx_posvals,:)
end
end
Которые дают мне 8 решений (включая упомянутые вами ответные меры).
-1 1 0
1 -1 0
0 0 1
-1 1 1
1 -1 1
0 0 -1
-1 1 -1
1 -1 -1
Похоже, это решено. В случае, если кто-нибудь найдет ошибку, пожалуйста, дайте мне знать. Родриго
Существует бесконечное число перпендикулярных векторов в трехмерном пространстве.
Если вы хотите ограничить их компоненты по значениям 0, +-1
, затем рассмотрим следующий подход:
Ваши векторные компоненты A=(ax, ay, az)
, Точечный продукт перпендикулярного вектора B=(bx, by, bz)
с А должен быть равен нулю
ax * bx + ay * by + az * bz = 0
Для формирования компонентов B:
get A components
nullify arbitrary component (if one of other components is not zero)
exchange two another components
negating one of them
пример:
(bx, by, bz) = (0, -az, ay)
Так для вектора A=(1,1,-1)
один из шести перпендикуляров B1=(0, 1, 1)
Для вектора A=(1,1,0)
Есть четыре варианта с данными ограничениями:
(-1, 1, 0)
(1, -1, 0)
(0, 0, 1)
(0, 0, -1)
Если вы хотите исправить пару компонентов perp. вектор - просто подставьте нужные значения в формулу точечного произведения и найдите неизвестный компонент B