3D :给定 2 个点 (P0, P1),找到第三个点 (P2),其中 DotProduct(P0P2, P1P2) == 0

3D : Given 2 points (P0, P1), find the third point (P2) where DotProduct(P0P2, P1P2) == 0

抱歉我的英语不好。

你知道找到标题中问题的最佳(性能)算法吗? 提醒一下,问题是:
给定 2 个点 (P0, P1),找到第三个点 (P2),其中 DotProduct(P0P2, P1P2) == 0

为了解决这个问题,我将执行以下操作:

但我认为有更有效的解决方案。

你能帮帮我吗?

谢谢:)

PS : 我在 Space (3D)

工作

编辑:正如 ja72 所说,我忘记添加约束...所以这里是完整的问题:
我有 P0 和 P0',它们定义了 object 的局部 X 轴(P0 是 object 的中心)。
我还有 P1,我必须用它来找到 P2,所以 P0P2 行定义了这个 object.
的局部 Y 轴 P1 正交于 P0P0'。

正如我在评论中所解释的,需要更多的约束才能定义一个独特的点。事实上,您还需要 2 个约束条件。

问题如下图:

取任意一个包含P0和P1的平面。以 P0 和 P1 为直径点画一个圆。默认情况下,沿圆的任何 点都会有DOT(P0-P2,P0-P1)==0。参见 Thale's Theorem

编辑 1

问题现在定义为分解 P1P0 沿 x 轴的相对位置并找到垂直 y 使得

P1 = P0 + a*x + b*y

其中 ab 是下面定义的距离。每个 P1P0xy 都是具有 (x,y,z) 个值的 3D 矢量。

  1. 定义相对向量r = P1-P0
  2. 求距离a = Dot(r,x)/Dot(x,x)
  3. 找到点P2 = P1-a*x
  4. 求距离b=Magnitude(P2-P0)
  5. 求单位向量y=(P2-P0)/b

完成!

注意:x 不需要是单位向量,但它有助于使值 a 对应于 [=13] 之间的实际投影距离=] 和 P1.