2017-02-17 13 views
1

난 타원체 안에 점을 생성하고 부드러운 타원체 표면에 맞추려고 노력하고 있습니다. 목표는 3 개의 주축에서 a, b 및 c의 값을 찾아야하는 알려지지 않은 데이터에 맞추는 것입니다. Rinv는 pc와 동등해야합니다. 하지만 나는 다른 순서로 PC를 얻고있다. 그래서 올바른 순서를 matlab에 내 데이터를 회전 좌표를 찾아야 좌표.주요 고유 방향을 찾는 방법은 무엇입니까?

a=3; 
b=5; 
c=1; 
index=1; 
for i=1:500000 
    x=10*rand-5; 
    y=10*rand-5; 
    z=10*rand-5; 
    if ((x^2/a^2) + (y^2/b^2) + (z^2/c^2) -1) <0 
     C(index,:)=[x,y,z]; 
     index=index+1; 
    end 
end 

theta=pi/4; phi=pi/6; omega = pi/3; 
Rx= [1 0 0; 0 cos(theta) -sin(theta); 0 sin(theta) cos(theta)]; 
Ry= [cos(phi) 0 sin(phi); 0 1 0; -sin(phi) 0 cos(phi)]; 
Rz= [cos(omega) -sin(omega) 0; sin(omega) cos(omega) 0; 0 0 1]; 
R= Rz*Ry*Rx; 
Rinv = inv(R); 
X = C*R; 
[pc,val]=eig(X'*X); E=diag(val); 
[sa,sb]= sort(pc*E, 'descend'); sb 
order = [2,3,1]; 
nC= X*pc(:,order); 
plot3(nC(:,1),nC(:,2),nC(:,3),'.') 
hold on 
[x, y, z] = ellipsoid(0,0,0,a,b,c,30); 
hSurface=surf(x, y, z, 'FaceColor','blue','EdgeColor','none'); 
alpha(0.5) 

특히이 줄에는 nC = X * pc (:, order); 주문을 수동으로 찾고 있습니다. 어느 누구든지 (1) 어떻게 PC 주문을 올바르게 찾을 수 있습니까? (x, y, z) = 타원체 (0,0,0, a, b, c, 30)

+0

"올바른"순서는 어느 것입니까? –

+0

Rinv와 pc를 수동으로 비교 한 다음 주문을 찾아야합니다. 이 특정 예에서는 [2,3,1]이지만 다른 데이터 세트의 경우에는 다를 것입니다. – user3704712

+0

나는 아직도 미안하다. 'Rinv'는 회전 행렬의 역입니다. 회전 행렬에는 "순서"가 없습니다. 무슨 소리 야? –

답변

3

계산하려면 다음을 수행하십시오. 고유 공간에서 a,b,c의 값을 얻으려면 고유 공간 투영 타원체의 반경을 계산하면됩니다. 이것은 타원체가 고유 공간에서 축 지향적이기 때문에 사소한 것입니다 (처음에 이것을하는 유일한 이유라고 생각합니다). 각 방향에서 최대치와 최소치를 구하십시오!

nC= X*pc; 
plot3(nC(:,1),nC(:,2),nC(:,3),'r.') 
hold on 

a2=(max(nC(:,1))-min(nC(:,1)))/2; 
b2=(max(nC(:,2))-min(nC(:,2)))/2; 
c2=(max(nC(:,3))-min(nC(:,3)))/2; 

[x, y, z] = ellipsoid(0,0,0,a2,b2,c2,30); 
hSurface=surf(x, y, z, 'FaceColor','blue','EdgeColor','none'); 
alpha(0.5) 
axis equal 

참고이 코드는 실제로 order 쓸모 수있다.

enter image description here

+1

모두에게 감사드립니다. nC = X * pc; [x, y, z] = 타원체 (0,0,0, a2, b2, c2,30); – user3704712