2016-03-05 3 views
3

Я пытаюсь имитировать движение цели в Matlab, чьи начальные координаты x и y, истинный подшипник и скорость (в м/с) указаны. Мне интересно, если есть способ просто нарисовать прямую линию, на заданный угол подшипника, чтобы показать путь, по цели (как показано на изображении ниже)Как нарисовать линию под углом подшипника в Matlab?

Bearing

Заранее спасибо!

ответ

0

Я не уверен, если я его правильно, вот мое решение:

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'); 
+0

Благодарим за помощь Себастьян. Я довольно новичок в Matlab, поэтому не могли бы вы рассказать о том, как вы манипулируете переменными x_start и y_start в заявлениях о перекрестности сюжета? Кроме того, если я меняю угол наклона на 120 градусов, я заметил, что конечная позиция находится в точке (5,20), что означает, что объект движется в противоположном направлении туда, где он должен. Может ли быть способ исправить это? –

+0

@BilalHussain Я изменил свой ответ на определение угла. Выводы перекрестия ничего особенного. Я рисую только две строки. Если вы добавите, например, [-1 1] до значения 10, то Matlab создает вектор из [9 11]. Поэтому x_start + [- 1 1] создает [9 11], а [y_start y_start] создает [20 20]. Важно, чтобы вы имели начальную и конечную позицию в x- и y-направлении в вашей команде plot. – Sebastian

+0

И, пожалуйста, подтвердите, что на вопрос ответили, если на него ответили. – Sebastian

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]) 

enter image description here

Тогда для того, чтобы изменить отношение и скорость, вы просто вызовите функцию compass снова с новой несущей/скорости.

new_theta = deg2rad(new_angle_degrees); 
c = compass(hax, new_speed * cos(new_theta), new_speed * sin(new_theta)); 

Другие варианты включают полярные Plotting 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]); 

enter image description here

Теперь, чтобы обновить этот участок с новым подшипником, скорость, время, вы бы просто позвонить polar снова с указанием осей.

hpolar = polar(hax, [0 theta], [0 speed], '-o'); 
+0

Я сомневаюсь, что это решение. Он сказал, что хочет нарисовать путь с ясной начальной и конечной точкой. Компас функции - это что-то для диаграмм фазора, но не очень хорошо показывать начальную и конечную точку. колчан - это что-то для векторного поля. – Sebastian

+0

Благодарим вас за помощь. Как заявил Себастьян, я хочу указать начальную позицию цели. Сценарий может заключаться в том, что цель первоначально находится в координатах (100 100), движущихся со скоростью 200 м/с при подшипнике 130 градусов. То, что я, по сути, хочу сделать, это найти позицию цели через определенный период времени (скажем, 10 секунд) и нарисовать линию между начальной и конечной точками, чтобы отобразить путь, пройденный мишенью. –

+0

Есть ли способ объединить направление, как показано на полярных участках, показанных в вашем сообщении, а также найти положение цели вдоль линии, изображающей путь цели? –

Смежные вопросы