我正在使用MATLAB打印我的模拟结果。结果涉及无人机必须访问的无人机轨迹和航路点。无人机应该配备一个摄像头,其范围视图为10x10。现在,该图显示了无人机的轨迹作为访问航路点的线路。是否有可能显示相机的足迹,而不是实际的轨迹?我想绘制矩形相机的视图,以显示该区域的详尽报道。可以选择将点绘制为方形,交叉或cyrcles,但是可以设置这些点的边界吗?
提前谢谢
答案 0 :(得分:4)
使用标记大小指示范围视图的问题在于航点的数据单位与标记大小之间没有直接关系。换句话说,标记大小的10
值并不一定意味着方形标记的一侧将长达10个数据单位(由缩放和轴的限制定义)。 / p>
另一种方法是在每个航点上绘制方形patches,其中补丁与无人机的轨迹对齐。这是你如何做到这一点:
% Generate some sample data:
N = 20; % Number of waypoints
x = cumsum(5.*rand(1, N)); % X coordinates of UAV
y = cumsum(5.*rand(1, N)); % Y coordinates of UAV
% Compute vectors parallel and perpendicular to the trajectory at each point:
v = [diff(x); diff(y); zeros(1, N-1)]; % Vectors (1 per column)
v = bsxfun(@rdivide, v, sqrt(sum(v.^2, 1))); % Normalize each column to a unit vector
v = v(:, [1 1:end]); % Replicate a vector for starting point
vCross = cross(v, [zeros(2, N); ones(1, N)]); % Perpendicular vector
% Generate patch coordinates:
R = 10; % Range view
xPatch = [x+(R/2).*(v(1, :)+vCross(1, :)); ...
x+(R/2).*(v(1, :)-vCross(1, :)); ...
x-(R/2).*(v(1, :)+vCross(1, :)); ...
x-(R/2).*(v(1, :)-vCross(1, :))];
yPatch = [y+(R/2).*(v(2, :)+vCross(2, :)); ...
y+(R/2).*(v(2, :)-vCross(2, :)); ...
y-(R/2).*(v(2, :)+vCross(2, :)); ...
y-(R/2).*(v(2, :)-vCross(2, :))];
% Plot the patches and trajectory:
patch(xPatch, yPatch, [0 0.3 0], 'FaceAlpha', 0.25, 'EdgeColor', 'none');
hold on;
plot(x, y, '-', 'Color', [0.8 0 0], 'Marker', '.', 'MarkerSize', 12);
axis equal;
这是一个样本图:
答案 1 :(得分:1)
首次尝试时,您可以将标记形状指定为方形并设置常量标记大小,例如
plot(x,y,'s','markersize',10)
此处x
和y
是持有无人机坐标的矢量。字母's'将标记形状设置为 square ,大小设置为10.
实际上,UAV轨迹是在3d空间中定义的,其中地面以上的变化高度对应于不同的足迹尺寸和形状。考虑到这一点需要更多的努力。
此外,这假设点间距足够紧密,否则标记之间会出现空白区域。