平面上距离某点最近的点

3

我想找到平面上距离给定点最近的点。 我有平面的方程式,点和它们之间的距离。 如何找到平面上距离给定点最近的点?

我有一个四面体,其边长为: bcx=0, acy=0, abz=0, x/a+y/b+z/c=1(a、b、c不要与平面方程式中的Ax+By+Cz=D混淆,运行脚本时需要输入它们)。

function [d n]=tetradist(x,y,z,a,b,c)    
if z>0 && y>0 && x>0 && z<c && y<b && x<a && x/a+y/b+z/c<1
        d1=abs(a*b*z)/sqrt((a*b)^2);
        d2=abs(b*c*x)/sqrt((b*c)^2);
        d3=abs(a*c*y)/sqrt((a*c)^2);
        d4=abs(b*c*x+a*c*y+a*b*z-a*b*c)/sqrt((b*c)^2 + (a*c)^2 + (a*b)^2);
A = [d1 d2 d3 d4];
B = sort(A,'ascend');
d = B(1);
point=[x y z];
if d==d1
    normalv=[0 0 a*b]';
elseif d==d2
    normalv=[b*c 0 0]';
elseif d==d3
    normalv=[0 a*c 0]';
else
    normalv=[b*c a*c a*b]';
end
end

现在我有最短距离,以向量形式表示的我的点和最近平面的法向量。那么如何找到所述平面上离我的点“point”最近的点?

提前感谢!


1
你是在数学上提问吗?还是想知道如何在Matlab中实现?如果是前者,那么也许math.stackexchange更适合你,如果是后者,请发布一些代码和方程等... - Dan
在Matlab中,我可以通过数学方法来解决这个问题,但问题是,当我编写一个脚本来查找这些点时,由于这些点有一些小数位,所以循环会变得非常麻烦。 - simtaxman
请发布您目前的代码。 - Dan
1个回答

5

如果你的平面方程是Ax + By + Cz = D,点的位置是(PQR),那么离该点最近的平面位置为:

(P,Q,R) + λ * (A,B,C)

在哪里

λ = (D - P*A - B*Q - C*R) / (A^2 + B^2 + C^2)

以下 Matlab 代码可以计算出这个点。
function x = closestpoint(n, d, p)
# n is the vector [A,B,C] that defines the plane
# d is the distance of the plane from the origin
# p is the point  [P,Q,R]
v = (d - sum(p.*n)) / sum(n.*n);
x = p + v * n;

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接