使用两个 3D 点在 3D space 中查找垂直坐标
Find perpendicular coordinates in 3D space using two 3D points
假设我有一个六乘六的立方体,每个立方体都有 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) 的大小吗?
谢谢,
罗德里戈
3D 中有无数个垂直向量space。
如果您想通过值 0, +-1
限制它们的组件,请考虑下一个方法:
你的向量分量是 A=(ax, ay, az)
。垂直向量 B=(bx, by, bz)
与 A 的点积必须为零
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
的未知分量
谢谢,这正是我所做的。
这是我的解决方案:
(在 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
看起来已经解决了。如果有人发现错误,请告诉我。
罗德里戈
假设我有一个六乘六的立方体,每个立方体都有 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) 的大小吗?
谢谢, 罗德里戈
3D 中有无数个垂直向量space。
如果您想通过值 0, +-1
限制它们的组件,请考虑下一个方法:
你的向量分量是 A=(ax, ay, az)
。垂直向量 B=(bx, by, bz)
与 A 的点积必须为零
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
的未知分量谢谢,这正是我所做的。
这是我的解决方案:
(在 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
看起来已经解决了。如果有人发现错误,请告诉我。 罗德里戈