Как указать пунктирную линию в plot3?

Я пытаюсь создать матрицу случайного вращения R и применить ее к вектору. В конце я должен построить как исходный вектор, так и вектор после поворота. Исходный вектор должен быть нанесен черной пунктирной линией, а вектор после поворота должен быть нанесен черной пунктирной линией. Я сделал каждый шаг правильно, за исключением того, что я не могу построить вектор после вращения точками. MATLAB строит только начальную и последнюю точки вектора, но не полностью. Интересно, если я попробую 'k--' вместо 'k.', все работает правильно. Может ли кто-нибудь показать, что мне здесь не хватает?

% rand(3,1) generates a random 3 by one column vector. We use this u to plot
u=rand(3,1)*2-1;

% plot the origin
plot3(0,0,0,'.k')

% axis setting
axis vis3d
axis off

%%%%% your code starts here %%%%%
% generate a random rotation matrix R

[R,N] = qr(randn(3));

% plot the x axis 
plot3([0,1],[0,0],[0,0],'r');
text(1,0,0,'x')

% plot the y axis 
plot3([0,0],[0,1],[0,0],'g');
text(0,1,0,'y')

% plot the z axis 
plot3([0,0],[0,0],[0,1],'b');
text(0,0,1,'z')

% plot the original vector u
plot3([0,u(1)],[0,u(2)],[0,u(3)], 'k--');
text(u(1),u(2),u(3),['(',num2str(u(1),'%.3f'),',',num2str(u(2),'%.3f'),',',num2str(u(3),'%.3f'),')'])
hold on

% apply rotation and calcuate v plot the vector after rotation v
v = R*u;

% plot the new vector v
plot3([0,v(1)],[0,v(2)],[0,v(3)], 'k.');
text(v(1),v(2),v(3),['(',num2str(v(1),'%.3f'),',',num2str(v(2),'%.3f'),',',num2str(v(3),'%.3f'),')'])

%%%%% your code ends here %%%%%

Я заменил 'k.' на ':k' и все заработало. Однако я понятия не имею о том, что происходит. Почему 'k.' не сработало?


person BHOS    schedule 01.04.2020    source источник
comment
Небольшой совет для вашего следующего вопроса: сократите код до минимально воспроизводимого примера. Это слишком большой пример для такой маленькой проблемы. На самом деле plot(1:10,'k.') уже показывает точно такую ​​же проблему. Разбивка вашей проблемы до такого минимального состояния улучшает ваше понимание ее и облегчает другим людям определение проблемы и помощь в ее устранении.   -  person Adriaan    schedule 01.04.2020
comment
Ok. Обязательно учту это в следующий раз.   -  person BHOS    schedule 02.04.2020


Ответы (1)


В документации по plot() это четко указано:

. Точка
-. Штрихпунктирная линия
: Пунктирная линия

Таким образом, k. создает только черную точку в качестве маркера (т. е. в точных точках, которые вы указали как координаты (x,y,z)), тогда как k: создает пунктирную линию от точки к точке.

Тот же синтаксис работает и для других команд построения графиков, где вы можете указать стили линий, например plot3D().

person Adriaan    schedule 01.04.2020