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
为了解决这个问题,我将执行以下操作:
- 距离 P0P1 (dist(P0, P1)) 已知。所以我用毕达哥拉斯检索了两个方程:dist(P0, P2)² + dist(P1, P2)² = dist(P0, P1)²
- 我用点积检索了另外两个方程:DotProduct(P0P2, P1P2) = 0
- 最后,我用 4 个方程和 3 个变量求解系统
但我认为有更有效的解决方案。
你能帮帮我吗?
谢谢:)
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
问题现在定义为分解 P1
到 P0
沿 x
轴的相对位置并找到垂直 y
使得
P1 = P0 + a*x + b*y
其中 a
和 b
是下面定义的距离。每个 P1
、P0
、x
和 y
都是具有 (x,y,z)
个值的 3D 矢量。
- 定义相对向量
r = P1-P0
- 求距离
a = Dot(r,x)/Dot(x,x)
- 找到点
P2 = P1-a*x
- 求距离
b=Magnitude(P2-P0)
- 求单位向量
y=(P2-P0)/b
完成!
注意:x
不需要是单位向量,但它有助于使值 a
对应于 [=13] 之间的实际投影距离=] 和 P1
.
抱歉我的英语不好。
你知道找到标题中问题的最佳(性能)算法吗?
提醒一下,问题是:
给定 2 个点 (P0, P1),找到第三个点 (P2),其中 DotProduct(P0P2, P1P2) == 0
为了解决这个问题,我将执行以下操作:
- 距离 P0P1 (dist(P0, P1)) 已知。所以我用毕达哥拉斯检索了两个方程:dist(P0, P2)² + dist(P1, P2)² = dist(P0, P1)²
- 我用点积检索了另外两个方程:DotProduct(P0P2, P1P2) = 0
- 最后,我用 4 个方程和 3 个变量求解系统
但我认为有更有效的解决方案。
你能帮帮我吗?
谢谢:)
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
问题现在定义为分解 P1
到 P0
沿 x
轴的相对位置并找到垂直 y
使得
P1 = P0 + a*x + b*y
其中 a
和 b
是下面定义的距离。每个 P1
、P0
、x
和 y
都是具有 (x,y,z)
个值的 3D 矢量。
- 定义相对向量
r = P1-P0
- 求距离
a = Dot(r,x)/Dot(x,x)
- 找到点
P2 = P1-a*x
- 求距离
b=Magnitude(P2-P0)
- 求单位向量
y=(P2-P0)/b
完成!
注意:x
不需要是单位向量,但它有助于使值 a
对应于 [=13] 之间的实际投影距离=] 和 P1
.