0

假设我有一个六乘六的立方体,每个立方体都有 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)的大小吗?

谢谢,罗德里戈

4

2 回答 2

0

3D 空间中有无穷多个垂直向量。

如果您想通过 values 限制它们的组件0, +-1,请考虑下一种方法:

你的向量分量是A=(ax, ay, az). 垂直向量与 A 的点积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 的未知分量

于 2017-09-19T17:04:41.640 回答
0

谢谢,这正是我所做的。

这是我的解决方案:

(在 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_o​​finterest=(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

看起来这已经解决了。如果有人发现和错误,请告诉我。罗德里戈

于 2017-09-19T19:32:21.000 回答