How can I rotate a vector by a certain amount along a specific plane?
Ältere Kommentare anzeigen
I have three points in inertial space which is enough to specify a plane. I have a vector that lies in this plane, and would like to rotate this vector so that it becomes perpendicular with its original self, through a rotation about the plane. For example:
my points:
a=[1 .3 .5];
b=[0 0 0];
c=[4 5 6];
%plane passes through points a, b, and c, a is the vector to rotate
EDIT
I mean to say a rotation on the plane (rotating with the pivot being the origin 0,0,0)
Akzeptierte Antwort
Weitere Antworten (1)
Bjorn Gustavsson
am 31 Mai 2021
Bearbeitet: Bjorn Gustavsson
am 1 Jun. 2021
Simply take another vector that lies in your plane, here c (you should understand why we can use c straight away). Then form an array that's in the plane but perpendicular to a:
d = c-dot(c,a)*a;
Then you get a vector that's perpendicular to a:
g = cross(a,d);
Here you'll have to plug in a normalization in order to not scale a. That was for rotating a out of the plane. For the rotation around the normal-vector of the plane you're close to done after the calculation of d - just normalize it to give it the same length as a.
HTH
8 Kommentare
Alessandro Maria Laspina
am 31 Mai 2021
Bjorn Gustavsson
am 31 Mai 2021
Ok, so then use that part of my solution.
Alessandro Maria Laspina
am 1 Jun. 2021
Alessandro Maria Laspina
am 1 Jun. 2021
Bjorn Gustavsson
am 1 Jun. 2021
Bearbeitet: Bjorn Gustavsson
am 3 Jun. 2021
OK, fixed a typo. The vector d lies in the plane you want and is perpendicultar to a - provided the array c does not happen to be parallel or anti-parallel with a (which is statistically improbable, but you should most likely check for that). This is easy to see if you sketch on paper - you'll just imagine being lucky enough that your plane lies perfectly aligned with the paper. Since this array is perpendicular to a you only need to scale it to have the same length as a, if you have a direction-preference you might also multipy the vector with -1.
d = c-dot(c,a)*a/norm(a)^2; % perp to a
d = d*norm(a)/norm(d); % scaled to same length
HTH
Alessandro Maria Laspina
am 3 Jun. 2021
Bearbeitet: Alessandro Maria Laspina
am 3 Jun. 2021
Alessandro Maria Laspina
am 3 Jun. 2021
Bearbeitet: Alessandro Maria Laspina
am 3 Jun. 2021
Bjorn Gustavsson
am 3 Jun. 2021
OK, now I think I've fixed the typos properly. The correct equation should be:
d = c-dot(c,a/norm(a))*a/norm(a); % subtract the projection of c in the direction of a to get a vector perp to a
d = d*norm(a)/norm(d); % scaled to same length of a
Kategorien
Mehr zu Creating and Concatenating Matrices finden Sie in Hilfe-Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!