三維空間幾何 點到直線的距離


本文轉自【https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html

Point-Line Distance--3-Dimensional

PointLineDistance3D

Let a line in three dimensions be specified by two points x_1=(x_1,y_1,z_1) and x_2=(x_2,y_2,z_2) lying on it, so a vector along the line is given by

 v=[x_1+(x_2-x_1)t; y_1+(y_2-y_1)t; z_1+(z_2-z_1)t].
(1)

The squared distance between a point on the line with parameter t and a point x_0=(x_0,y_0,z_0) is therefore

 d^2=[(x_1-x_0)+(x_2-x_1)t]^2+[(y_1-y_0)+(y_2-y_1)t]^2+[(z_1-z_0)+(z_2-z_1)t]^2.
(2)

To minimize the distance, set d(d^2)/dt=0 and solve for t to obtain

 t=-((x_1-x_0)·(x_2-x_1))/(|x_2-x_1|^2),
(3)

where · denotes the dot product. The minimum distance can then be found by plugging t back into (2) to obtain

d^2=(x_1-x_0)^2+(y_1-y_0)^2+(z_1-z_0)^2+2t[(x_2-x_1)(x_1-x_0)+(y_2-y_1)(y_1-y_0)+(z_2-z_1)(z_1-z_0)]+t^2[(x_2-x_1)^2+(y_2-y_1)^2+(z_2-z_1)^2]
(4)
=|x_1-x_0|^2-2([(x_1-x_0)·(x_2-x_1)]^2)/(|x_2-x_1|^2)+([(x_1-x_0)·(x_2-x_1)]^2)/(|x_2-x_1|^2)
(5)
=(|x_1-x_0|^2|x_2-x_1|^2-[(x_1-x_0)·(x_2-x_1)]^2)/(|x_2-x_1|^2).
(6)

Using the vector quadruple product

 (AxB)^2=A^2B^2-(A·B)^2
(7)

where x denotes the cross product then gives

 d^2=(|(x_2-x_1)x(x_1-x_0)|^2)/(|x_2-x_1|^2),
(8)

and taking the square root results in the beautiful formula

d = (|(x_2-x_1)x(x_1-x_0)|)/(|x_2-x_1|)
(9)
= (|(x_0-x_1)x(x_0-x_2)|)/(|x_2-x_1|)
(10)
.    
(11)

Here, the numerator is simply twice the area of the triangle formed by points x_0x_1, and x_2, and the denominator is the length of one of the bases of the triangle, which follows since, from the usual triangle area formula, Delta=bd/2

 

Matlab代碼實現

norm是計算范數,默認是計算模。

p1= [1,2,3];
p2=[2,3,8];
p0=[4,5,6];
dis = norm(cross((p0-p1),(p0-p2)))/norm(p2-p1);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM