Построение кругов с комплексными числами в MATLAB - PullRequest
1 голос
/ 23 марта 2020

Я хочу сделать фигуру в MATLAB, как описано на следующем рисунке enter image description here

Я сделал следующее:

x = [1 2 3];
y = [2 2 4];
radius = [1 1.2 2.2];
theta = [-pi 0 pi];
figure;
scatter(x,y,radius)

Как сделать Я добавляю угол тета к графику для представления комплексного числа z = radius.*exp(1j*theta) в каждой пространственной координате?

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Технически говоря, это только круги, если оси x и y масштабируются одинаково. Это потому, что scatter всегда строит круги, независимо от масштабов (и они остаются кругами, если вы увеличиваете изображение неравномерно. + У вас есть проблема с линией, которая должна указывать угол ...

Вы можете решите обе проблемы с помощью рисования кружков:

function plotCirc(x,y,r,theta)
% calculate "points" where you want to draw approximate a circle
ang = 0:0.01:2*pi+.01; 
xp = r*cos(ang);
yp = r*sin(ang);
% calculate start and end point to indicate the angle (starting at math=0, i.e. right, horizontal)
xt = x + [0 r*sin(theta)];
yt = y + [0 r*cos(theta)];
% plot with color: b-blue
plot(x+xp,y+yp,'b', xt,yt,'b'); 
end

имея эту маленькую функцию, вы можете вызвать ее, чтобы нарисовать столько кругов, сколько хотите

x = [1 2 3];
y = [2 2 4];
radius = [1 1.2 2.2];
theta = [-pi 0 pi];

figure
hold on
for i = 1:length(x)
    plotCirc(x(i),y(i),radius(i),theta(i))
end

enter image description here

0 голосов
/ 23 марта 2020

Я снова вернулся к разбросу, и похоже, что вы не можете получить это непосредственно из функции. Надеемся, что есть чистый встроенный способ сделать это, и кто-то другой будет вмешиваться в это, но в качестве плана резервного копирования, вы можете просто добавить строки самостоятельно.

Вы хотели бы количество строк, которые это такая же, как длина вашего набора координат, от центральной точки до края под целевым углом, и, к счастью, «линия» делает несколько строк, если вы подаете ее в матрицу.

Вы можете просто прикрепить это к концу вашего кода, чтобы получить наклонную линию:

x_lines = [x; x + radius.*cos(theta)];
y_lines = [y; y + radius.*sin(theta)];
line(x_lines, y_lines, 'Color', 'b')

Я должен был специально назначить цвет, так как в противном случае «линия» делает каждую новую строку циклически изменяйте цвета по умолчанию, но это также означает, что вы можете легко изменить цвет линии, чтобы выделиться больше. Там также нет центральной точки, но это будет просто второй график рассеяния с крошечным радиусом. Должен отображать большую часть того, что вы ищете, по крайней мере.

(Моя версия Matlab достаточно старая, так что разброс ведет себя по-разному, поэтому я могу проверять только часть линии, но они имеют правильную длину и местоположение .)

Редактировать: Другой ответ дает хорошее представление о том, уместен ли здесь разброс. Наверное, лучше тоже нарисовать круг.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...