can someone explain how i would compute this code
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
% SO FAR THIS IS THE CODE IVE COMPUTED IM NOT SURE WHERE TO CONTINUE OR IF
% CODE CORRECT SO FAR
u1 = [1; 2; 3];
a1 = 45;
u2 = [0; 1; 0];
a2 = 30;
function qmul(u1, a1, u2, a2)
% Convert angles from degrees to radians
a1_rad = deg2rad(a1);
a2_rad = deg2rad(a2);
% Normalize the Euler axes
u1 = u1 / norm(u1);
u2 = u2 / norm(u2);
% Compute quaternions q1 and q2
epsilon1 = u1 * sin(a1_rad / 2);
eta1 = cos(a1_rad / 2);
q1 = [epsilon1; eta1];
epsilon2 = u2 * sin(a2_rad / 2);
eta2 = cos(a2_rad / 2);
q2 = [epsilon2; eta2];
% Compute q3 = q1 * q2 using quaternion multiplication
epsilon3 = cross(epsilon1, epsilon2) + eta1 * epsilon2 + eta2 * epsilon1;
eta3 = eta1 * eta2 - dot(epsilon1, epsilon2);
q3 = [epsilon3; eta3];
% Compute Q(q1) matrix
I = eye(3);
S_epsilon1 = [0, -epsilon1(3), epsilon1(2);
epsilon1(3), 0, -epsilon1(1);
-epsilon1(2), epsilon1(1), 0];
Q_q1 = eta1 * I + S_epsilon1 * epsilon1;
% Compute q3 = Q(q1) * q2 using matrix-vector multiplication
q3_matrix = Q_q1 * q2;
% Compute the rotation matrix R(q3)
R_q3 = (eta3 - norm(epsilon3)^2) * I + 2 * epsilon3 * epsilon3' - 2 * eta3 * S(epsilon3);
% Display results
fprintf('Quaternion q1: [%f, %f, %f, %f]\n', q1);
fprintf('Quaternion q2: [%f, %f, %f, %f]\n', q2);
fprintf('Quaternion q3 (quaternion multiplication): [%f, %f, %f, %f]\n', q3);
fprintf('Quaternion q3 (matrix-vector multiplication): [%f, %f, %f, %f]\n', q3_matrix);
fprintf('Matrix Q(q1):\n');
disp(Q_q1);
fprintf('Rotation matrix R(q3):\n');
disp(R_q3);
end
1 comentario
James Tursa
el 31 de Jul. de 2023
What exactly are you asking us to help you with? If you want to verify your quaternion multiplication and conversion to rotation matrix code, why not simply compare to results obtained from calling MATLAB functions for this? Keep in mind that MATLAB quaternion functions are in scalar-vector order, whereas your code is in vector-scalar order.
Respuestas (1)
Image Analyst
el 25 de Jul. de 2023
Your function qmul does not compute q1q2, or the rotation matrix Rq3, or print anything out to the command window. Fix those things and then enter in the same sample values they gave you and see if you get the same results as they do.
To learn other fundamental concepts, invest 2 hours of your time here:
1 comentario
Image Analyst
el 25 de Jul. de 2023
By the way, what is the status of our other outstanding question here:
You never commented on it or accepted it. We don't like just tossing answers out into a black hole never to hear anything ever again.
Ver también
Categorías
Más información sobre Performance and Memory en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!