Как нарисовать линию под углом в 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');
Другие вопросы по тегам