2013-05-09 54 views
3

我正在尝试在离给定点最近的飞机上找到一个点。 我有平面方程,它们之间的点和距离。 如何找到距离给定点最近的平面上的点?离点最近的飞机上的点

我有一个四面体的边: bcx = 0,acy = 0,abz = 0,x/a + y/b + z/c = 1(a,b,c不要与Ax +由平面方程中的+ 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 

所以,现在我有最短的距离,我的点作为一个向量和最接近的平面的法向量。现在我该如何找到离我的观点最近的飞机上的那个点?

在此先感谢!

+1

哟要求数学?或者如何在Matlab中做到这一点?如果前者,那么也许math.stackexchange更好,如果后者然后请张贴一些代码和方程等... – Dan 2013-05-09 09:15:44

+0

在matlab中,我可以做数学,但问题是,当我编写脚本来搜索我尝试通过遍历所有点来搜索它,但由于点有一些小数点,循环很快变得非常讨厌。 – simtaxman 2013-05-09 09:21:23

+0

发布您到目前为止的代码 – Dan 2013-05-09 09:24:13

回答

5

如果您的平面的方程为AX + +锆= d和点的位置是(PQ- [R)然后在平面上的位置最接近点是

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

其中

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

以下Matlab代码计算该POI nt

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; 
+0

非常感谢! – simtaxman 2013-05-09 10:22:04