让我们假设我有一个六乘六个立方体,每个立方体都有XYZ坐标。
从中间立方体(0,0,0)移动到另一侧(例如(0,1,0),我想找到其他4个成分,这些组件沿着中间立方体的方向向中立方体进行(0,1,0)。
如果我们移动一个维度,这很容易(我的大脑可以掌握它)...组件将为(-1,0,0),( 1,0,0),(0,0,0,0, 1),(0,0,-1)。
现在,有人可以帮助我转向大小,其中两个(1,1,0)或三个坐标更改(1,1,-1)?
谢谢Rodrigo
3D空间中垂直向量的无穷大。
如果要按值 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)
vector A=(1,1,0)
有四个具有给定限制的变体:
(-1, 1, 0)
(1, -1, 0)
(0, 0, 1)
(0, 0, -1)
如果要修复PERP的一对组件。向量 - 仅在点产品公式中替换所需的值,并求解B
谢谢,这正是我所做的。
这是我的解决方案:
(在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];
,然后基于我的参考坐标[eg 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
看起来这是解决的。如果有人发现和错误,请告诉我。Rodrigo