如何在matlab中以方位角画一条线?
Posted
技术标签:
【中文标题】如何在matlab中以方位角画一条线?【英文标题】:How to draw a line at a bearing angle in matlab? 【发布时间】:2016-06-19 12:12:04 【问题描述】:我试图在 Matlab 中模拟目标的运动,其初始 x 和 y 坐标、真实方位和速度(以 m/s 为单位)已指定。我想知道是否有一种方法可以简单地以指定的方位角绘制一条直线以显示目标所走的路径(如下图所示)
提前致谢!
【问题讨论】:
【参考方案1】:您最好的选择是依靠内置的极坐标绘图功能之一来执行此操作。我认为与您的需求最相似的是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');
【讨论】:
我怀疑这是一个解决方案。他说,他要画一条有明确起点和终点的道路。功能罗盘是相量图的东西,但不太好显示起点和终点。 quiver 是向量场的东西。 感谢您的帮助。正如塞巴斯蒂安所说,我希望指定目标的起始位置。一个场景可能是目标最初位于坐标 (100,100),以 200 m/s 的速度行进,方位角为 130 度。我本质上想要做的是在给定的时间段(比如说 10 秒)后找到目标的位置,并在起点和终点之间画一条线来描绘目标所走的路径。 有没有一种方法可以结合您帖子中显示的极坐标图所示的方向,但也可以沿着描绘目标路径的线找到目标的位置? @BilalHussain 所以你希望那条线的“长度”等于行进的距离(速度 x 时间)? @Suever 是的,没错。定义初始坐标后,我想看到开始和结束位置之间的一条线(通过考虑速度和时间获得)。【参考方案2】:我不确定我是否正确,这是我的解决方案:
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');
【讨论】:
感谢您的帮助塞巴斯蒂安。我是 Matlab 的新手,所以请您详细说明您如何在绘图十字准线语句中操作 x_start 和 y_start 变量?此外,如果我将方位角更改为 120 度,我注意到结束位置在 (5,20),这意味着对象正在向与它应该的方向相反的方向移动。有没有办法解决这个问题? @BilalHussain 我已经改变了我对你的角度定义的回答。十字准线声明没什么特别的。我只画了两条线。如果您添加例如[-1 1] 到值 10 然后 Matlab 创建一个 [9 11] 的向量。所以 x_start+[-1 1] 创建 [9 11] 并且 [y_start y_start] 创建 [20 20]。在绘图命令中,您必须在 x 和 y 方向上具有开始和结束位置,这一点很重要。 如果问题已回答,请确认问题已回答。 @BilalHussain 请注意。我建议不要走这条路,因为这会生成大量难以管理的绘图对象(并使用不同的参数进行更新)。鼓励使用提供相同功能的内置函数。 @Suever 如果您声称有一个内置函数可以使用较少的绘图对象获得与他的帖子中相同的图片,那么您必须展示它。我不认为他只想要指南针图中的方向。以上是关于如何在matlab中以方位角画一条线?的主要内容,如果未能解决你的问题,请参考以下文章