2017-07-05 8 views
2

Matrix enthält die Punktwolke der Oberfläche des Ellipsoids. Sie müssen diese Matrix und den Zentroid drehen, um sich nicht zu bewegen.Drehung der Matrix im Raum Bewegt sich und bewegt sich nicht zum Platzieren auf Matlab

Zentroid Ellipsoid ist [xc1,yc1,zc1]

Rotation sollte derart sein, dass neue Lage des Punktes [xp1,yp1,zp1] am Referenzpunkt [rx,ry,rz] sein sollte. Radius von Punkt und Referenz sind gleich. Die ganze Matrix dreht sich, indem sie dem einzigen Punkt folgt.

Um diese Aufgabe zu erledigen, habe ich versucht, Projektionen der Linie von [xc1,yc1,zc1] bis [xp1,yp1,zp1] auf xy, yz und xz Ebenen zu finden und die Winkel zu finden. Dieser Teil wurde wie gezeigt here gemacht. Dann wiederholte das gleiche Verfahren für die Linie zwischen [xc1,yc1,zc1] und [rx,ry,rz].

iniV = [xc1 - xp1,yc1 - yp1,zc1 - zp1]; 
nextV = [xc1 - xr,yc1 - yr,zc1 - zr]; 

%Projected angles for point 
[zRotIni, yRotIni, xRotIni] = projectionAngle(iniV); 
%Projected angles for refence 
[zRotNext, yRotNext, xRotNext] = projectionAngle(nextV); 

ich davon aus, dass die Differenz der Winkel von Punkt und Referenz gibt mir die Information, wie viel um jede Achse zu drehen, benötigt. h.: ​​Der Winkel in der yz-Ebene gibt an, wie viel um die x-Achse gedreht werden muss.

xRotAngle = xRotNext - xRotIni; 
yRotAngle = yRotNext - yRotIni; 
zRotAngle = zRotNext - zRotIni; 

Durch getan Matlab Funktionen Rotation Matrix wie auf unten unterhalb

rX = rotx(xRotAngle); 
rY = roty(yRotAngle); 
rZ = rotz(zRotAngle); 

%vertexT is point cloud matrix 
vertexRotT = rX * vertexT; %rotate around x axis 
%After rotating around x, rotate around y axis 
vertexRotT = rY * vertexRotT; 
vertexRotT = rZ * vertexRotT; 

Das Ergebnis gezeigt Figur gezeigt ist. enter image description here

  • Blau Ellipsoid ist die ursprüngliche
  • Blaue Linie Vektor Punkt des ist
  • rote Linie zeigt die Referenzlinie

Nach der Drehung, blaue und rote Linie sollte auf einander. Das gesamte Ellipsoid wurde jedoch an einen neuen Ort verschoben, dessen Schwerpunktskoordinate bei [xc2,yc2,zc2] liegt und Punkt ist [xp2,yp2,zp2].

Als Ergebnis Rotation Annahme nicht funktionierte und irgendwo immer .Allerdings den Schwerpunkt bewegt Form sollte bei [xc1,yc1,zc1]

+2

nur einen Gedanken: Zentrum der Matrix auf [0, 0, 0] -> Ihre Rotation tun -> bringen zurück zu [xc1, yc1, zc1] –

+1

OK, funktioniert. Bitte antworte ich werde akzeptieren – isifzade

Antwort

3
  1. Verschieben Sie die Matrix auf den Ursprung [0, 0, 0]
  2. Führen Sie merken werden die Drehungen
  3. Verschieben sie die Matrix in seine Ausgangs Zentrum Lage zurück [xc1, yc1, zc1]