Hi everyone,
I have a matrix A [100x3] which represents the coordinates of a cilinder oriented in the space. I have calculated the center of this cylinder by doing C=Mean(A).
My question is how can i rotate the cylinder in order to have origin of the xyz axis in the point C?
Any help would be appreciated,
Lorenzo

Antworten (1)

William
William am 16 Jan. 2021

0 Stimmen

Lorenzo -- If all you need is to have the center of the cylinder located at the origin of the coordinate system, then what you need is a translation, not a rotation. It would go something like this:
C = mean(A);
Cnew = A - repmat(C,100,1);
If you also needed the cylinder axis to be aligned with one of the coordinate axes, then a rotation would be needed.

3 Kommentare

Starting from R2016b you can use
C = mean(A);
Cnew = A - C;
Lorenzo Bennati
Lorenzo Bennati am 16 Jan. 2021
@William @Walter Roberson thank you for your answer.
The last question is exactly how could i do if i want the cylinder axis be aligned with one of the z axis.
Thank you again
Walter Roberson
Walter Roberson am 16 Jan. 2021
You have an N x 3 array. You can post-multiply it with a 3 x 3 rotation array.
If you pad the N x 3 with a column of zeros, then you can create a 4 x 4 rotation and translation array using makehgtform() https://www.mathworks.com/help/matlab/ref/makehgtform.html
You can use pca() to determine the angles the data currently points. https://www.mathworks.com/help/stats/pca.html . You would probably have to convert the norm into a rotation angle. Remember to use the negative of the current angle to rotate back to the axis.

Melden Sie sich an, um zu kommentieren.

Gefragt:

am 15 Jan. 2021

Kommentiert:

am 16 Jan. 2021

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by