2017-02-17 90 views
1

我想在橢球體內生成點,然後嘗試適應光滑的橢球體表面。目標是適應未知數據,我必須在3個主軸上找到a,b和c的值。 Rinv應該等同於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命令。 (2)對於未知數據集a,b,c的值在這裏「[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

相關問題