2013-05-09 3 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

+0

matlab에서 수학적으로 할 수 있지만 문제는 스크립트를 작성하여 검색 할 때입니다. points 나는 모든 점들을 반복하면서 그것을 찾으려고 노력한다. 그러나 점에 몇 개의 소수점이 있기 때문에 루프는 매우 불쾌해진다. – simtaxman

+0

지금까지 가지고있는 코드 게시 – Dan

답변

5

비행기의 방정식 + Cz에 의해 액스 + 인 경우는 = D과 지점의 위치에 가장 가까운 (P, Q, R) 평면에서 다음 위치 포인트

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

다음 MATLAB 코드이 POI를 계산

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

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

관련 문제