在与其他2个点等距的线上找到点

时间:2014-06-06 11:47:53

标签: algorithm geometry line plane

我知道我可能应该在math.stackexchange中提出这个问题,但答案主要是“笔纸”类型。我需要一种有效的方法来实现,这就是我在这里问的原因。

问:给出2分A& B和线L.点和线是3D。如何在给定线L上找到与给定点A和A等距的点。乙

我遵循的方法是:

  • 找到平面P,垂直于AB线并穿过A&的中心。乙

  • P和L的交点就是答案。

我正在处理大型数据集(一个三维图像),并且进行上述计算涉及大量数据。乘法和除法(总计)。

那么有更好的方法吗。

工作代码会非常有用。

提前致谢。

3 个答案:

答案 0 :(得分:1)

TL; DR。解决方案位于底部。

好的,我们说这些是我们的参数:

  

x 0 x 1 ,描述这条线。

     

a b ,这两点。

哪里

  

x 0 = [x 0 ,y 0 ,z 0 < /子>]

     

x 1 = [x 1 ,y 1 ,z 1 < /子>]

     

a = [x a ,y a ,z a ]

     

b = [x b ,y b ,z b ]

     

δ = [δ x ,δ y ,δ z ] =( x 1 - x 0

然后我们对线的描述可以看作是参数函数:

  

l(λ)= x 0 +λ*( x 1 - X <子> 0

因此,我们试图找到满足以下等式的λ值:

  

(l(λ) - a 2 =(l(λ) - b 2 < / SUP>

(这里我有点作弊,所以 x 2 = x x 的)

扩大我们得到的一切:

  

(λx 1 +(1 - λ)x 0 - x a 2 +

     

(λy 1 +(1 - λ)y 0 - y a 2 +

     

(λz 1 +(1 - λ)z 0 - z a 2 =

     

(λx 1 +(1 - λ)x 0 - x b 2 +

     

(λy 1 +(1 - λ)y 0 - y b 2 +

     

(λz 1 +(1 - λ)z 0 - z b 2

简化,我们得到:

  

(λδ x + x 0 - x a 2 +

     

(λδ y + y 0 - y a 2 +

     

(λδ z + z 0 - z a 2 =

     

(λδ x + x 0 - x b 2 +

     

(λδ y + y 0 - y b 2 +

     

(λδ z + z 0 - z b 2 < / p>

扩展括号并取消,我们得到:

  

-2δ x x a λ+(x 0 - x a 2 +

     

-2δ y y a λ+(y 0 - y a 2 +

     

-2δ z z a λ+(z 0 - z a 2 =

     

-2δ x x b λ+(x 0 - x b 2 +

     

-2δ y y b λ+(y 0 - y b 2 +

     

-2δ z z b λ+(z 0 - z b 2

我们可以进一步简化为一些漂亮的矢量操作:

  

δ。( x b - x a )=    x 0 - x b 2 -    x 0 - x a 2

使用一个独特的解决方案重新排列以获得λ中的线性方程非常简单。

答案 1 :(得分:1)

如果线L由参数矢量方程

描述
P=C+t*D  

(其中C是一些基点,D是方向矢量,t是参数)
那么点P与给定点A和A的距离是等距的。 B,当从P到A-B区段中间的向量垂直于AB向量。因此,这些向量的标量积为零。

(B-A)*(C+t*D-(A+B)/2)=0

让&#39; S

F=B-A
G=C-(A+B)/2

然后(以坐标形式)

Fx*(Gx+t*Dx)+Fy*(Gy+t*Dy)+Fz*(Gz+t*Dz)=0
t*(Dx*Fx+Fy*Dy+Fz*Dz)=-(Fx*Gx+Fy*Gy+Fz*Gz)
t=-(Fx*Gx+Fy*Gy+Fz*Gz)/(Dx*Fx+Fy*Dy+Fz*Dz)

(Dx*Fx+Fy*Dy+Fz*Dz)=0的情况对应于垂直线AB和L.在这种情况下,当分子(Fx*Gx+Fy*Gy+Fz*Gz)非零时,没有解,并且如果指数为零,则存在无限的解(所有在线点是等距的)

答案 2 :(得分:0)

你可以求解方程组来得到答案。 3D中的一条线是这样的:

x = x<sub>0</sub> + t * v<sub>x</sub>
y = y<sub>0</sub> + t * v<sub>y</sub>
z = z<sub>0</sub> + t * v<sub>z</sub>

让我们来表示我们正在搜索的P点。现在我们有:

(P x - A x 2 +(P y - A y < / sub>) 2 +(P z - A z 2 =(P x < / sub> - B x 2 + (P y - B y 2 +(P z - B z 2

请注意,虽然所有这些方程似乎都是四次方,但是P x 的平方我们会被划伤,因为它出现在等式的两边。现在使用这个方程组和上面的方程来找到三个变量P x ,P y 和P z