Как нарисовать линию под углом в Matlab?
Я пытаюсь смоделировать движение цели в Matlab, чьи начальные координаты x и y, истинный азимут и скорость (в м / с) указаны. Мне интересно, есть ли способ просто нарисовать прямую линию под указанным углом, чтобы показать путь, пройденный целью (как показано на рисунке ниже)
Заранее спасибо!
2 ответа
Для этого лучше всего положиться на одну из встроенных функций полярного построения. Я думаю, что тот, который наиболее похож на ваши потребности будет compass
, По существу, она изображает стрелку, указывающую от центра к точке (определенной в декартовых координатах) на полярной диаграмме.
theta = deg2rad(130);
% Your speed in m/s
speed = 5;
hax = axes();
c = compass(hax, speed * cos(theta), speed * sin(theta));
% Change the view to orient the axes the way you've drawn
view([90 -90])
Затем, чтобы изменить направление и скорость, просто позвоните compass
работать снова с вашим новым подшипником / скоростью.
new_theta = deg2rad(new_angle_degrees);
c = compass(hax, new_speed * cos(new_theta), new_speed * sin(new_theta));
Другие полярные графики включают polar
а также polarplot
которые принимают полярные координаты, но не имеют наконечника стрелки. Если вам не нравится полярный сюжет, вы всегда можете пойти с quiver
на декартовых осях (убедитесь, что вы указываете те же оси).
Редактировать На основе ваших отзывов и запросов ниже приведен пример полярного графика пройденного расстояния.
% Speed in m/s
speed = 5;
% Time in seconds
time = 1.5;
% Bearing in degrees
theta = 130;
hax = axes();
% Specify polar line from origin (0,0) to target position (bearing, distance)
hpolar = polar(hax, [0 deg2rad(theta)], [0 speed * time], '-o');
% Ensure the axis looks as you mentioned in your question
view([90 -90]);
Теперь, чтобы обновить этот сюжет с новым азимутом, скоростью, временем, вы бы просто позвонили polar
снова указав оси.
hpolar = polar(hax, [0 theta], [0 speed], '-o');
Я не уверен, правильно ли я понял, вот мое решение:
figure;hold on; % Create figure
x_start = 10;% Starting position
y_start = 20;
plot(x_start+[-1 1],[y_start y_start],'k');% Plot crosshairs
plot([x_start x_start],y_start+[-1 1],'k');
angle = -(130-90)*pi/180; % Bearing angle 130° like in your graph
x_target = x_start+10*cos(angle); % Calculation of target position
y_target = y_start+10*sin(angle);
plot(x_target+[-1 1],[y_target y_target],'k');% Plot crosshairs
plot([x_target x_target],y_target+[-1 1],'k');
% Draw line between start and target
plot([x_start x_target],[y_start y_target],'g');
set(gca,'xlim',[0 30],'ylim',[0 30]); % Adjust axes
text(x_start+1,y_start,'Start'); % Write text to points
text(x_target+1,y_target,'End');