【发布时间】:2017-06-18 15:38:51
【问题描述】:
我正在尝试推导一个公式来提取向量u。
我得到了一些初始数据:
- 平面
F用方法提取其法线n = F->normal()。 - 矢量
c不在平面F内,并通过某个点E也不在平面F内。
还有一些使用限制:
- 所需的矢量
u垂直于矢量c。 - 矢量
u也垂直于某个未给出的矢量r。矢量r平行于平面F,也垂直于矢量c。因此,我们可以说向量c、r和u是正交的。
让我们将* 表示为点积,^ 运算符是两个 3d 向量之间的叉积。
向量u的计算很容易使用叉积:vec3 u = c^r。因此,我的整个任务被缩小到如何找到与给定平面F 平行并同时垂直于给定矢量c 的向量r。。 p>
因为我们知道r与F平行,所以我们可以使用平面的法线和点积:n*r = 0。由于r 是未知的,因此可以有无数行满足上述方程。所以,我们也可以使用r垂直于c的条件:r*c = 0。
总结,有两个点积方程可以帮助我们找到向量r:
r*c = 0;
r*n = 0;
但是,我很难弄清楚如何以算法方式获得两个方程提供的向量r 坐标。假设r = (x, y, z),我们想找到x、y和z;仅从两个方程式看来是不可能的:
x*c.x + y*c.y + z*c.z = 0;
x*n.x + y*n.y + z*n.z = 0;
我觉得我错过了一些东西,例如,我需要第三个约束。提取x、y 和z 是否还需要其他任何东西?还是我的逻辑有缺陷?
【问题讨论】:
-
使用您的符号:
r = c ^ n -
由于 r 与 F 平行,因此它与 n 正交。因此,您正在寻找一个垂直于 n 和 c 的向量,该向量通过叉积 n ^ c 找到。