Matlab: добавление нескольких трехмерных декартовых координатных осей в трехмерный график - PullRequest
0 голосов
/ 10 октября 2018

Получение права на вопрос: Как мне сделать так, чтобы мой сюжет выглядел так: enter image description here

примерно так:

enter image description here

где правосторонняя декартова система координат (с метками оси в конце стрелок, например, в этом примере метка оси x равна = $x_1 ^ G $)

Некоторая проработка и предварительная обработка: Во-первых, я новичок в matlab и "математике математике".Я попытался найти на этом сайте вопросы, аналогичные тем, которые я изложил выше, но ничего не увидел (но я, возможно, пропустил), так что, надеюсь, это не дубликат.

Вот код, который я использовал для разработки своего вращающегося эллипсоида (так как я новичок в matlab, я был бы признателен за любые комментарии к моему коду):

%Insert the components of the 3x3 matrix (i.e. the scalar values of the 2nd-rank symmetric tensor)

Pmatrix = [115.9547 12.03765 4.68235; 12.03765 116.3702 -2.47985; 4.68235 -2.47985 134.5488];

[R,D]=eig(Pmatrix); %find the eigenvectors (R) and eigenvalues (D) of the 2nd-rank tensor

[x, y, z] =sphere; %generate coordinates of a sphere, using the sphere command

%Stretch the coordinates of the sphere to form the tensor's representation ellipsoid, do this by multiplying the x, y, z coordinates by the square-roots of the eigenvalues
x1 = x*sqrt(D(1,1));
y1 = y*sqrt(D(2,2));
z1 = z*sqrt(D(3,3));
figure;
hmesh = mesh(x1,y1,z1);
set(hmesh,'FaceColor',[0.5,0.5,0.5],'FaceAlpha',0.5) %set color to gray, make mostly transparent
axis equal; %Make tick mark increments on all axes equal
xlabel('x');
ylabel('y');
zlabel('z');

theta1 = -asind(R(3,1)); %rotation around y-axis in degrees
psi1 = atan2d(R(3,2)/cos(theta1),R(3,3)/cos(theta1)); %rotation around x-axis in degrees 
phi1 = atan2d(R(2,1)/cos(theta1),R(1,1)/cos(theta1)); %rotation around z-axis in degress

direction = [1 0 0]; %rotate the surface plot psi1 degrees around its x-axis
rotate(hmesh,direction,psi1)
direction = [0 1 0]; %rotate the surface plot theta1 degrees around its y-axis
rotate(hmesh,direction,theta1)
direction = [0 0 1]; %rotate the surface plot phi1 degrees around its z-axis
rotate(hmesh,direction,phi1)

view([-36 18]);  %Change the camera viewpoint

ДобавитьНа мой вопрос я хотел бы добавить другие (аналогичные) элементы к моему графику, чтобы конечный продукт выглядел так:

enter image description here

При создании изображения выше добавлен набор осей, коллинеарных с собственными векторами эллипсоида (красные, зеленые, синие стрелки):

enter image description here

Затем эти оси продолжаются в противоположном направлении через начало координат, где эти части осей показаны пунктирными линиями:

enter image description here

Затем углы между осями глобальной координаты (черные стрелки) и осями эллипсоида (цветные стрелки) обозначаются, как показано здесь:

enter image description here

Комментироватьв этом последнем добавлении кто-то создал код Matlab с этими функциями ( см. видео на YouTube, онре ).В описании видео говорится, что код Matlab можно найти здесь .Будучи новичком в Matlab, я не вижу, где находится код, например, я не вижу, где на этой странице (скриншот ниже) код для построения того графика Matlab, который можно увидеть в видео на YouTube.Если вы можете подсказать мне, как перемещаться по этой странице обмена математическими файлами, это было бы полезно.

enter image description here

...